拒绝j_security_check上的GET方法

She*_*lby 3 java security websphere weblogic java-ee

有没有办法只允许POST请求到j_security_check?我想拒绝GET.我正在使用基于表单的安全性,并希望只允许帖子到j_security_check.如果通过GET发出登录请求,则应拒绝该请求.

小智 10

由于使用GET方法的JAAS的安全性问题,我一直试图在JBOSS(Tomcat)服务器上做同样的事情,我尝试了各种方法.

  1. 在url模式/ j_security_check上使用web.xml安全性约束仅使用POST - 这对于JAAS机制不适用于普通servlet.

  2. 将登录详细信息从登录页面传递到检查请求方法的中间servlet,如果不是GET,则转发到j_security_check. - 这没有用,而且过于复杂.

  3. 创建一个过滤器,它将检查请求方法并仅在POST消息上调用j_security_check - 这不起作用,因为JAAS在Web容器中更深,并且在过滤机制之前被调用.

  4. 创建一个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)

这确实有效.