我对Spring Security中的URL-pattern有些困惑。因为在Servlet Core HTTP Security中,/
和/*
URL模式用于指定一个或多个目录。其中/
用于一个目录,而/*
用于多个目录。但是,在Spring Security中,还引入了/**
,那么/**
URL-pattern在安全性方面的主要目的是什么。
我对Spring Security中的URL-pattern有些困惑。因为在Servlet Core HTTP Security中,/
和/*
URL模式用于指定一个或多个目录。其中/
用于一个目录,而/*
用于多个目录。但是,在Spring Security中,还引入了/**
,那么/**
URL-pattern在安全性方面的主要目的是什么。
/* 和 /** 的区别在于后者匹配整个目录树,包括子目录,而 /* 只匹配指定层级。
@Override
protected void configure(HttpSecurity http) throws Exception {
// ...
.antMatchers(HttpMethod.GET, "/**").permitAll
.antMatchers(HttpMethod.POST, "/*").permitAll
// ...
}
在这个配置中,任何 "Get" 请求都将被允许,例如:
/**
的主要目的是捕获所有通配符:<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>
@Secured("AUTH_REPORT_EXPORTXML")
/*
和/**
之间没有区别,除了后者可以捕获所有通配符。"/api/v1/user/*" - 将匹配任何值,直到另一个“/”
"/api/v1/user/**" - 将匹配以字符串开头的所有值(包括如果找到另一个“/”)。