如何以不过滤调用特定模式(如/ api / **)的方式设置Spring Security Core?
grails.plugins.springsecurity.filterChain.chainMap = [
'/api/**': '',
'/**': 'JOINED_FILTERS',
]
不起作用,因为它会尝试解析bean''。
除了'JOINED_FILTERS,-filter1,-filter2,......'之外还有其他令人讨厌的解决方法吗?
如何从Spring Security中排除静态资源?
答案 0 :(得分:6)
您可以实现简单的非身份验证过滤器::
class NonAuthenticationFilter extends GenericFilterBean {
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);
}
}
在resources.groovy中定义它:
beans = {
nonAuthFilter(NonAuthenticationFilter)
}
并配置您的网址格式:
grails.plugins.springsecurity.filterChain.chainMap = [
'/api/**': 'nonAuthFilter',
'/**': 'JOINED_FILTERS',
]
grails.plugins.springsecurity.interceptUrlMap = [
'/api/**': ['IS_AUTHENTICATED_ANONYMOUSLY']
]
答案 1 :(得分:2)
您需要将匿名过滤器添加到过滤器链中。 如果您按照grails spring安全休息配置教程,您可能会得到以下代码:
grails.plugin.springsecurity.filterChain.chainMap = [
//Stateless chain
[
pattern: '/**',
filters: 'JOINED_FILTERS,-anonymousAuthenticationFilter,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter'
]
]
请注意,您有" -anonymousAuthenticationFilter " ,从您的过滤器链中删除此过滤器。 通过从代码中删除此部分(-anonymousAuthenticationFilter),此过滤器将返回到您的过滤器链, 所以你可以再次使用 @Secured(" permitAll")或 @Secured([' IS_AUTHENTICATED_ANONYMOUSLY'])。
我的最终滤镜链图如下所示,就像一个魅力。
grails.plugin.springsecurity.filterChain.chainMap = [
//Stateless chain
[
pattern: '/**',
filters: 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter'
]
]
当您需要查看有关身份验证过程的更多详细信息时,在开发环境中将此内容添加到logback.groovy
logger("org.springframework.security", DEBUG, ['STDOUT'], false)
logger("grails.plugin.springsecurity", DEBUG, ['STDOUT'], false)
logger("org.pac4j", DEBUG, ['STDOUT'], false)
logger("StackTrace", ERROR, ['FULL_STACKTRACE'], false)
root(ERROR, ['STDOUT', 'FULL_STACKTRACE'])
如果您不使用弹簧安全支架,同样的想法也适用。
答案 2 :(得分:1)
grails.plugin.springsecurity.interceptUrlMap = [
'/api/**': ['IS_AUTHENTICATED_ANONYMOUSLY']
]
这还不够,应该添加这一行:
grails.plugin.springsecurity.securityConfigType = "InterceptUrlMap"
grails.plugins.springsecurity.*
grails.plugin.springsecurity.*//plugin without s