在spring j_acegi_security_check中停止接受GET请求

时间:2012-09-07 05:23:56

标签: spring security login spring-security

我使用j_acegi_security_check登录Spring网络应用程序,但因为它也接受GET参数,这意味着我可以使用<登录应用程序/ p>

<https://localhost:8080/webapp/j_acegi_security_check?j_username=***&j_password=***&loginButton=Login>

我想避免这种情况。它应该只接受POST个请求。怎么做?

1 个答案:

答案 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()接缝也是一种好方法