Spring-Security:Spring-Security中/ **和/ * url模式之间的区别

时间:2014-07-25 05:29:19

标签: java security spring-security url-pattern

我对Spring安全性中的URL模式有点混淆。因为,在servlet核心http安全性中,//* url模式用于指定一个或多个目录。 /用于一个目录,/*用于许多目录。但是在spring-security中,/**也是介绍,/** url-pattern在安全性方面的主要目的是什么。

3 个答案:

答案 0 :(得分:18)

/ *&之间的区别/ **是第二个匹配整个目录树,包括子目录,其中/ *仅匹配指定的级别。

答案 1 :(得分:6)

根据Spring Security文档,/**的主要目的是捕获所有通配符:

  

在实践中,我们建议您在服务层使用方法安全性来控制对您的访问权限   应用程序,并不完全依赖于在Web应用程序级别定义的安全性约束的使用。   网址发生变化,很难考虑应用程序可能支持的所有可能的网址   如何操纵请求。你应该试着限制自己使用一些简单的蚂蚁路径   很容易理解。总是尝试使用“默认拒绝”方法,您可以使用全能通配符   (/ **或**)最后定义并拒绝访问。

我们也不应该忘记

  

模式总是按照定义的顺序进行评估。因此,重要的是在列表中定义的更具体的模式比不太具体的模式更高。

因此我们可以这样:

<security:http pattern="/rest-service/**"  authentication-manager-ref="authenticationManager" auto-config="false" access-decision-manager-ref="accessDecisionManager">
    <security:intercept-url pattern="/rest-service/report/export/xml" access="AUTH_REPORT_EXPORTXML" />        
    <security:intercept-url pattern="/**" access="AUTH_SYSTEM_LOGIN" />
    <security:http-basic />
</security:http>

这意味着对于所有请求,我们将需要AUTH_SYSTEM_LOGIN权限,但专门针对/ rest-service / report / export / xml,用户也需要AUTH_REPORT_EXPORTXML权限,因为它已在上面定义。正如他们所说,最好不要仅依赖于这种安全约束,这意味着使用安全注释复制服务方法中的那些也是好的:

@Secured("AUTH_REPORT_EXPORTXML")

总的来说,据我所知,/*/**之间没有区别,只有最后一个会捕获所有通配符。

答案 2 :(得分:5)

 @Override
    protected void configure(HttpSecurity http) throws Exception {
    // ...
    .antMatchers(HttpMethod.GET, "/**").permitAll
    .antMatchers(HttpMethod.POST, "/*").permitAll
    // ...
 }

在此配置中,任何&#34; 获取&#34;请求将被允许,例如:

  • /书
  • /书/ 20
  • /书/ 20 /作者

因此,所有这些网址都匹配带有模式&#34; / **&#34;。

的文字

&#34; 发布&#34;

的允许网址
  • /书
  • /杂志

以上网址与&#34; / *&#34;

匹配