在spring j_acegi_安全检查中停止接受GET请求

在spring j_acegi_安全检查中停止接受GET请求,spring,security,login,spring-security,Spring,Security,Login,Spring Security,我正在使用j_acegi\u security\u check登录Springweb应用程序,但由于它也接受GET参数,这意味着我可以使用 <https://localhost:8080/webapp/j_acegi_security_check?j_username=***&j_password=***&loginButton=Login> 我想避免这种情况。它应该只接受POST请求。如何做到这一点?默认情况下,spring security 3.x只接受登录

我正在使用
j_acegi\u security\u check
登录
Spring
web应用程序,但由于它也接受
GET
参数,这意味着我可以使用

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


我想避免这种情况。它应该只接受
POST
请求。如何做到这一点?

默认情况下,spring security 3.x只接受登录请求

但是您可以使用
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter

(但正如我之前所说,
postOnly
的默认值是正确的)


但可能主要的问题是您使用的是旧的SpringAcegi安全性,而不是实际的SpringSecurity3.x。如果是这样的话,以上的说法是我不真实的。所以我强烈建议更新

如果是Spring ACEGI 1.0.x

尝试使用以下内容覆盖
AuthenticationProcessingFilter
中的
attemptAuthentication
方法:

if (request.getMethod().equals("POST"))
   return super.attemptAuthentication(request);
else
   throw new AuthenticationServiceException("service accept only http post");

请参阅注释:重写
onPreAuthentication()
seams也是一种好方法

感谢您回复Ralph…在我目前的应用程序中,我使用的是1.0.5版本,您知道如何在该版本安全性中使其成为“PostOnly”吗?我没有更新JAR的权限。请查看代码,并搜索筛选器(UsernamePasswordAuthenticationFilter——在1.0.5中,它至少有一个负责身份验证的其他包,可能还有其他名称)。如果它没有此参数,则需要对筛选器进行子类化,并添加类似以下内容:
If(!request.getMethod().equals(“POST”))抛出新的AuthenticationServiceException(“非POST”);
我正在使用这个org.acegisecurity.ui.webapp.AuthenticationProcessingFilter过滤器,我在acegi_安全包中发现了一个类UsernamePasswordAuthenticationToken类,它与您上面提供的类的名称相似,所以我应该扩展哪个类?我不想显得不礼貌,但您看过这个类吗sses,你读过它的java文档了吗?你试着去理解它们做了什么吗?--我希望如此,如果不是的话,我会很难过,因为我告诉你这是
AuthenticationProcessingFilter
override
attemptAuthentication
方法,就像这样
if(request.getMethod().equals(“POST”))返回super.attemptAuthentication(request);else抛出新的AuthenticationServiceException(“服务仅接受http post”);
我扩展了覆盖了onPreAuthentication()方法的AuthenticationProcessingFilter,现在它工作正常。感谢您的支持Ralph:)