Spring security:在 3.1 中,仅针对“GET”请求绕过安全过滤器
Posted
技术标签:
【中文标题】Spring security:在 3.1 中,仅针对“GET”请求绕过安全过滤器【英文标题】:Spring security: In 3.1, bypass security filter for only 'GET' requests 【发布时间】:2014-01-31 02:16:11 【问题描述】:我希望我的服务仅对传入的 POST/PUT/DELETE 请求执行身份验证,并为任何 GET 请求绕过它。低于 3.1 的 Spring 版本具有“filters=”none””属性,可用于绕过特定 URL 模式的所有安全过滤器。在 3.1 中,不推荐使用“filters=”none”,替代解决方案是为“http”元素使用“security=”none”属性。这不支持基于传入请求类型(GET/PUT/POST/DELETE)的配置。
我使用的是 Spring 3.1.1,当前配置如下:
<!-- Just un-comment any resource if you don't want authentication to be done on them -->
<http pattern="/base/version" security="none"/>
<!-- Secure resources -->
<http create-session='stateless' entry-point-ref="tokenAuthenticationEntryPoint">
<custom-filter position="PRE_AUTH_FILTER" ref="tokenAuthenticationFilter" />
<intercept-url pattern="/v1/abc/**" method="GET" filters="none"/> //This doesn’t work currently
<intercept-url pattern="/v1/abc/**" method="POST" access="ROLE_USER"/>
<intercept-url pattern="/v1/abc/**" method="PUT" access="ROLE_USER"/>
<intercept-url pattern="/v1/abc/**" method="DELETE" access="ROLE_USER"/>
<intercept-url pattern="/**" access="ROLE_USER" />
</http>
如何绕过 Spring 3.1 中 pattern="/v1/abc/**" method="GET" 的安全过滤器?
【问题讨论】:
【参考方案1】:我找到了解决问题的方法 - 使用基于表达式的访问控制,我使用了 access="permitAll" 来配置授权而不禁用过滤器。
<!-- Just un-comment any resource if you don't want authentication to be done on them -->
<http pattern="/base/version" security="none"/>
<!-- Secure resources -->
<http create-session='stateless' entry-point-ref="tokenAuthenticationEntryPoint" use- expressions="true">
<custom-filter position="PRE_AUTH_FILTER" ref="tokenAuthenticationFilter" />
<intercept-url pattern="/v1/abc/**" method="GET" access="permitAll"/>
<intercept-url pattern="/v1/abc/**" method="POST" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/v1/abc/**" method="PUT" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/v1/abc/**" method="DELETE" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
</http>
【讨论】:
以上是关于Spring security:在 3.1 中,仅针对“GET”请求绕过安全过滤器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Security 3.1 中进行没有身份验证和授权的并发会话控制
在 Spring Security 3.1 中,StandardPasswordEncoder 对密码进行盐渍化最合适的用途是啥?
Spring Security 3.1 中功能强大的加密工具 PasswordEncoder