Har*_*ara 16 java security spring-security url-pattern
我对Spring安全性中的URL模式有点混淆.因为,在servlet核心http安全性中,/和/*url模式用于指定一个或多个目录./用于一个目录,/*用于许多目录.但是在Spring-security中,/**还介绍了/**url-pattern在安全性方面的主要目的是什么.
根据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)
总的来说,据我所知/*,/**除了最后一个捕获所有通配符之外没有区别.
@Override
protected void configure(HttpSecurity http) throws Exception {
// ...
.antMatchers(HttpMethod.GET, "/**").permitAll
.antMatchers(HttpMethod.POST, "/*").permitAll
// ...
}
Run Code Online (Sandbox Code Playgroud)
在此配置中,任何“ Get ”请求都将被允许,例如:
因此,所有这些url都将匹配模式为“ / **”的文本。
“ Post ”的允许网址:
在上面用“ / *”匹配
| 归档时间: |
|
| 查看次数: |
16047 次 |
| 最近记录: |