拒绝j_security_check上的GET方法

时间:2010-07-22 18:29:27

标签: java security java-ee weblogic websphere

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

4 个答案:

答案 0 :(得分:10)

由于JAAS使用GET方法的安全问题,我一直试图在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容器中更深,并且在过滤机制之前被调用。

    < / LI>
  4. 创建一个Valve,它在JAAS之前被调用。

  5. 通过在调用方法中添加以下内容:

    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)

我正在考虑实施的另一种方法:

  • 在nginx / apache等反向代理/负载均衡器中阻止除j_security_check之外的所有POST请求

E.g。在Apache 2.4上,这有效:

<LocationMatch ".*j_security_check">
    AllowMethods POST
</LocationMatch>