문제

양식 기반 인증 (jboss/jaas)을 사용하고 있지만 내 양식은 데이터를 내 서블릿으로 전송하여 로그인을 시도하기 전에 약간의 수표를 수행 할 수 있습니다.

이제 J_SECURITY_CHECK으로 전달해야하지만 시도한 것은 작동하지 않았습니다 (404 오류) ...

J_SECURITY_CHECK로 어떻게 리디렉션 / 앞으로 나갈 수 있습니까 (응용 프로그램이 HTTPS / SSSL을 통해 실행 중인다)?

리디렉션으로 작동하게 할 수 있고 매개 변수는 URL로 이동하지만 안전하지는 않습니다 (사용자/패스가 브라우저 기록 등에 유지됨) ...

어떤 아이디어?

도움이 되었습니까?

해결책

나는 이것이 오래된 게시물이지만 답을 공유하고 싶었습니다.

원래 요청이 게시되면 처리를 수행 한 후에는 J_SECURITY_CHECK로 간단히 전달할 수 있습니다.

...
request.getParameterMap().put( "j_username", new String[]{ userId } );
request.getParameterMap().put( "j_password", new String[]{ password } );

try 
{
    request.getRequestDispatcher("/j_security_check").forward( request , response );
    return null;
} 
catch (ServletException e) 
{
    logger.error( e );
} 
catch (IOException e)
{
    logger.error( e );
}

다른 팁

Tomcat은 요청 만 수락합니다 j_security_check 해당 세션을 위해 로그인 프로세스를 시작한 경우. 따라서 먼저 보안 제약 리소스에 액세스해야합니다. 그런 다음 Tomcat이 로그인 양식으로 리디렉션됩니다. 그래야만 액세스 할 수 있습니다 j_security_check.

나는 이것이 너무 오래된 질문이라는 것을 알고 있지만 같은 문제와 그것을 해결하는 독특한 방법은 다음과 같은 것을 사용하고 있다는 것을 알았습니다.

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    String user = req.getParameter("j_username");
    String pass = req.getParameter("j_password");

    resp.sendRedirect("/Project-web/j_security_check?j_username=" + user    + "&j_password=" + pass);

}

방금 같은 문제가 있었고 다른 답변은 저를 위해 일하는 것으로 입증되지 않았기 때문에 내 자신의 해결책을 공유하고 싶었습니다.

1) 전달 목적으로 만 새 JSP (예 : loginforward.jsp)를 만듭니다.

<%@ page language="java" %>
<%
    final String username = request.getParameter("j_username");
    final String password = request.getParameter("j_password");
%>
<body onload="document.getElementById('creds').submit()">
    <form name="creds" id='creds' method="POST" action="j_security_check">
        <input type="hidden" name="j_username" value="<%= username %>">
        <input type="hidden" name="j_password" value="<%= password %>">
    </form>
</body>

2) 서블릿에서 해당 JSP로 전달하십시오.

final String redirectURL = String.format("loginForward.jsp j_username=%s&j_password=%s", username, password);
RequestDispatcher requestDispatcher = request.getRequestDispatcher(redirectURL);
requestDispatcher.forward(request, response);
return;    
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top