Jakarta ee 如何转发j_安全检查?

Jakarta ee 如何转发j_安全检查?,jakarta-ee,jboss,jaas,Jakarta Ee,Jboss,Jaas,我使用的是基于表单的身份验证(JBOSS/JAAS),但我的表单将数据发送到我的Servlet,以便在尝试登录之前执行一些检查 现在我需要转发给j_security_check,但我尝试的方法无效(404错误) 我如何重定向/转发到j_安全检查(请注意应用程序是通过https/sssl运行的) 我可以通过重定向和URL中的参数使其工作,但这并不安全(因为用户/通行证保留在浏览器历史记录中,等等) 有什么想法吗?如果Tomcat在会话之前启动了登录过程,它只接受对j_security_check的

我使用的是基于表单的身份验证(JBOSS/JAAS),但我的表单将数据发送到我的Servlet,以便在尝试登录之前执行一些检查

现在我需要转发给j_security_check,但我尝试的方法无效(404错误)

我如何重定向/转发到j_安全检查(请注意应用程序是通过https/sssl运行的)

我可以通过重定向和URL中的参数使其工作,但这并不安全(因为用户/通行证保留在浏览器历史记录中,等等)


有什么想法吗?

如果Tomcat在会话之前启动了登录过程,它只接受对
j_security_check
的请求。因此,首先需要尝试访问安全约束资源。然后Tomcat会将您重定向到登录表单。只有到那时你才被允许访问
j_security\u check

我知道这是一篇老文章,但我想分享一个答案

如果原始请求是POST,您只需在进行一些处理后转发给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 );
}

我知道这是一个太老的问题,但我也遇到了同样的问题,我发现解决这个问题的独特方法是使用以下方法:

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>

这不是我的问题。它正在重定向到我的登录表单。表单操作转到我的servlet,现在我想重定向/转发到j_安全检查。重定向可以工作,但它是一个GET请求,不安全
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;