我对spring安全中的URL-pattern有点困惑。因为在servlet核心http安全中,/和/* url模式用于指定一个或多个目录。/用于一个目录,/*用于多个目录。而在spring安全中,也介绍了/**,/** url模式在安全方面的主要作用是什么。
发布于 2014-07-25 14:14:37
/*和/**的不同之处在于,第二个匹配整个目录树,包括子目录,而as /*只在指定的级别匹配。
发布于 2018-02-14 17:44:38
@Override
protected void configure(HttpSecurity http) throws Exception {
// ...
.antMatchers(HttpMethod.GET, "/**").permitAll
.antMatchers(HttpMethod.POST, "/*").permitAll
// ...
}在此配置中,将允许任何"Get“请求,例如:
因此,所有这些urls都匹配模式为"/**“的文本。
“Post”允许的urls:
上面的Urls与"/*“匹配
发布于 2014-07-25 14:09:10
根据Spring Security文档,/**的主要目的是捕获所有通配符:
在实践中,我们建议您在服务层使用方法安全性,以控制对应用程序的访问,并且不要完全依赖于在web应用程序级别定义的安全约束的使用。URL会发生变化,很难考虑到应用程序可能支持的所有可能的URL以及如何处理请求。您应该尝试并限制自己使用一些简单的ant路径,这些路径很容易理解。总是尝试使用“deny-by-default”方法,在这种方法中,您最后定义了一个捕获所有通配符(/**或**)并拒绝访问。
我们也不应该忘记
模式总是按照定义的顺序进行评估。因此,在列表中定义更具体的模式比定义不太具体的模式更重要。
因此,我们可以得到类似这样的东西:
<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")一般来说,据我所知,/*和/**之间没有区别,只是最后一个捕获了所有的通配符。
https://stackoverflow.com/questions/24948651
复制相似问题