Подкласс DelgatingFilterProxy
и отметьте флаг, вызывать делегата или нет.
Затем используйте это в своем файле web.xml вместо DelegatingFilterProxy
, который используется для springSecurityFilterChain
(при условии, что вы используете конфигурацию пространства имен). Например:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>com.foo.spring.MyDelegatingFilterProxy</filter-class>
</filter>
В вашем DelegatingFilterProxy установите флажок (например, системное свойство), чтобы увидеть, следует ли вам делегировать или нет.
class MyDelegatingFilterProxy extends DelegatingFilterProxy {
override def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) {
if (System.getProperty("skipSpringSecurity" != null) {
// Ignore the DelegatingProxyFilter delegate
chain.doFilter(request, response)
} else {
// Call the delegate
super.doFilter(request, response, chain)
}
}
}
Вы можете использовать ту же технику, чтобы использовать общий шаблон, такой как <security:intercept-url pattern="/**" access="ROLE_USER" />
, а затем пропустить вызов фильтра Spring Security для некоторого набора путей в / (для статических файлов и т. Д.).