小智 10
由于使用GET方法的JAAS的安全性问题,我一直试图在JBOSS(Tomcat)服务器上做同样的事情,我尝试了各种方法.
在url模式/ j_security_check上使用web.xml安全性约束仅使用POST - 这对于JAAS机制不适用于普通servlet.
将登录详细信息从登录页面传递到检查请求方法的中间servlet,如果不是GET,则转发到j_security_check. - 这没有用,而且过于复杂.
创建一个过滤器,它将检查请求方法并仅在POST消息上调用j_security_check - 这不起作用,因为JAAS在Web容器中更深,并且在过滤机制之前被调用.
创建一个Valve,它在JAAS之前被调用.
通过在invoke方法中添加以下内容:
HttpServletRequest req = (HttpServletRequest) request;
if (req.getMethod().equals("GET")) {
log.warn("Someone is trying to use a GET method to login!!");
request.getRequestDispatcher("/login.jsp").forward(req, response);
throw new ServletException("Using a GET method on security check!");
}
Run Code Online (Sandbox Code Playgroud)
这确实有效.