j_security_check으로 전달하는 방법?
문제
양식 기반 인증 (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;