我使用j_acegi_security_check
登录Spring
网络应用程序,但因为它也接受GET
参数,这意味着我可以使用<登录应用程序/ p>
<https://localhost:8080/webapp/j_acegi_security_check?j_username=***&j_password=***&loginButton=Login>
我想避免这种情况。它应该只接受POST
个请求。怎么做?
答案 0 :(得分:1)
默认情况下,spring security 3.x仅接受POST
登录请求。
但您可以使用postOnly
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter
参数来控制此行为
(但正如我之前所说,postOnly
的默认值为真)
但也许主要的问题是你使用旧的弹簧acegi安全而不是真正的弹簧安全3.x.情况就是这样,上面的陈述是我不对的。所以我强烈建议更新!
如果是Spring ACEGI 1.0.x
尝试使用以下内容覆盖attemptAuthentication
中的AuthenticationProcessingFilter
方法:
if (request.getMethod().equals("POST"))
return super.attemptAuthentication(request);
else
throw new AuthenticationServiceException("service accept only http post");
查看评论:覆盖onPreAuthentication()
接缝也是一种好方法