有没有办法只允许POST请求到j_security_check?我想拒绝GET。 我正在使用基于表单的安全性,并希望只允许帖子到j_security_check。如果通过GET发出登录请求,则应拒绝该请求。
答案 0 :(得分:10)
由于JAAS使用GET方法的安全问题,我一直试图在JBOSS(Tomcat)服务器上做同样的事情,我尝试了各种方法。
在url模式/ j_security_check上使用web.xml安全性约束仅使用POST - 这对于JAAS机制不适用于普通servlet。
将登录详细信息从登录页面传递到检查请求方法的中间servlet,如果不是GET,则转发到j_security_check。 - 这没有用,而且过于复杂。
创建一个过滤器,它将检查请求方法并仅在POST消息上调用j_security_check - 这不起作用,因为JAAS在Web容器中更深,并且在过滤机制之前被调用。
< / LI>创建一个Valve,它在JAAS之前被调用。
通过在调用方法中添加以下内容:
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!");
}
这确实有效。
答案 1 :(得分:1)
答案 2 :(得分:0)
答案 3 :(得分:0)
我正在考虑实施的另一种方法:
E.g。在Apache 2.4上,这有效:
<LocationMatch ".*j_security_check">
AllowMethods POST
</LocationMatch>