在春季 j_acegi_security_check 中停止接受 GET 请求

Posted

技术标签:

【中文标题】在春季 j_acegi_security_check 中停止接受 GET 请求【英文标题】:Stop accepting GET request in spring j_acegi_security_check 【发布时间】:2012-08-31 23:41:35 【问题描述】:

我正在使用j_acegi_security_check 登录到Spring 网络应用程序,但因为它也接受GET 参数,这意味着我能够登录到应用程序

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

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

【问题讨论】:

【参考方案1】:

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

但您可以使用org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilterpostOnly 参数控制此行为

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


但也许主要问题是您使用的是旧的 spring acegi security 而不是实际的 spring security 3.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");

查看 cmets:覆盖 onPreAuthentication() seams 也是一个好方法

【讨论】:

感谢您回复 Ralph...在我目前的应用程序中,我使用的是 1.0.5 版本,您知道如何在该版本安全性中将其设为“PostOnly”吗?我没有权限更新罐子.. 查看代码,并搜索负责身份验证的过滤器(UsernamePasswordAuthenticationFilter -- 在 1.0.5 中它至少有一个其他包,可能是其他名称)。如果它没有这个参数,你需要子类过滤器并添加类似if (!request.getMethod().equals("POST")) throw new AuthenticationServiceException("not a POST"); 我正在使用这个 org.acegisecurity.ui.webapp.AuthenticationProcessingFilter 过滤器,我在 acegi_security 包中找到了一个 UsernamePasswordAuthenticationToken 类 与您上面提供的类的名称相似,那么我应该扩展哪个类?? 我不想变得不礼貌,但是您是否看过这些课程,您是否阅读过它的 java 文档,您是否尝试了解它们的作用? -- 我希望如此,否则我会非常难过我告诉你这是AuthenticationProcessingFilter 覆盖attemptAuthentication 这样的方法if (request.getMethod().equals("POST")) return super.attemptAuthentication(request); else throw new AuthenticationServiceException("service accept only http post"); 我扩展了 AuthenticationProcessingFilter 覆盖的 onPreAuthentication() 方法,现在它工作正常。感谢您的支持拉尔夫..:)

以上是关于在春季 j_acegi_security_check 中停止接受 GET 请求的主要内容,如果未能解决你的问题,请参考以下文章

在春季安全中注销特定会话ID

春季测试中的@QuerydslPredicate 在standaloneSetup 中失败

如何在春季安全中注销

ReactiveCrudRepository 在春季使用 Hibernate

如何在春季启动时加载@Cache?

IndexOutOfBoundsException 春季批处理和春季启动