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

Har*_*ara 16 java security spring-security url-pattern

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

小智 20

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


Ruf*_*ufi 6

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

实际上,我们建议您在服务层使用方法安全性,以控制对应用程序的访问,而不是完全依赖于在Web应用程序级别定义的安全性约束.URL发生变化,很难考虑应用程序可能支持的所有可能的URL以及如何操作请求.您应该尝试限制自己使用一些简单易懂的简单蚂蚁路径.始终尝试使用"默认拒绝"方法,其中您最后定义了一个全能通配符(/**或**)并拒绝访问.

我们也不应该忘记这一点

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

因此我们可以这样:

<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>
Run Code Online (Sandbox Code Playgroud)

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

@Secured("AUTH_REPORT_EXPORTXML")
Run Code Online (Sandbox Code Playgroud)

总的来说,据我所知/*,/**除了最后一个捕获所有通配符之外没有区别.


And*_*ich 5

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

在此配置中,任何“ Get ”请求都将被允许,例如:

  • /书
  • /书/ 20
  • / book / 20 / author

因此,所有这些url都将匹配模式为“ / **”的文本。

Post ”的允许网址:

  • /书
  • /杂志

在上面用“ / *”匹配