Java 拒绝j_安全检查上的GET方法
有没有办法只允许POST请求进行j_安全检查?我想拒绝得到。Java 拒绝j_安全检查上的GET方法,java,security,jakarta-ee,weblogic,websphere,Java,Security,Jakarta Ee,Weblogic,Websphere,有没有办法只允许POST请求进行j_安全检查?我想拒绝得到。 我使用基于表单的安全性,只允许帖子进行安全检查。如果通过GET发出登录请求,则应拒绝该请求。是,您可以拒绝GET请求。在安全约束部分的web.xml文件中,可以指定允许的http方法。在下面的xml中,此安全约束所允许的唯一方法是POST方法。j_安全检查只允许post方法 <security-constraint> <display-name>Your security constraint</di
我使用基于表单的安全性,只允许帖子进行安全检查。如果通过GET发出登录请求,则应拒绝该请求。是,您可以拒绝GET请求。在安全约束部分的web.xml文件中,可以指定允许的http方法。在下面的xml中,此安全约束所允许的唯一方法是POST方法。j_安全检查只允许post方法
<security-constraint>
<display-name>Your security constraint</display-name>
<web-resource-collection>
<web-resource-name>Your resource name</web-resource-name>
<url-pattern>/The URL pattern</url-pattern>
<http-method>POST</http-method>
<web-resource-collection>
<security-constraint>
您的安全约束
您的资源名称
/URL模式
邮递
您需要重新表述您的问题
j_安全检查通常用于登录页面
如果您请求安全资源,但未经身份验证,则会自动重定向到登录页面(假设应用程序配置为使用基于表单的安全性)
如果您的资源不应该因为GET请求而受到质疑,请遵循Doug提到的方法。例如,如果您想保护对myaccount的POST调用(Servlet的模式),那么只有在发出HTTP POST时,才会将您重定向到登录页面,而GET请求即使没有用户身份验证也会被接受
这意味着,您希望允许经过身份验证的用户访问POST请求,同时允许每个人访问GET请求。由于JAAS使用GET方法的安全问题,我尝试了各种方法,在JBOSS(Tomcat)服务器上尝试了同样的操作
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!");
}
这确实有效。我正在考虑实施的另一种方法:
- 在反向代理/负载平衡器(如nginx/apache)中阻止对j_security_check的所有请求(POST请求除外)
<LocationMatch ".*j_security_check">
AllowMethods POST
</LocationMatch>
AllowMethods POST
- 如果我需要更多的定制,我可以使用我自己的servlet重新实现j_安全检查