这是我的问题:当用户使用API(基本上是所有/ myapi / **请求)时,我不想使用任何spring安全核心过滤器,以避免创建无用的会话。 api基于oauth令牌。
所以,我使用插件spring-security-core进行用户身份验证,我在Config.groovy文件中添加了
grails.plugins.springsecurity.filterChain.chainMap = [
'/myapi/**': 'JOINED_FILTERS,-securityContextPersistenceFilter,-logoutFilter,-authenticationProcessingFilter,-securityContextHolderAwareRequestFilter,-rememberMeAuthenticationFilter,-anonymousAuthenticationFilter,-exceptionTranslationFilter',
'/**':'JOINED_FILTERS'
]
基本上,从我的理解,它不应该通过任何弹簧安全过滤器为所有/ myapi /东西,但实际上,它通过所有过滤器,因为它创建一个会话(我没有任何东西为会话/ myapi / something。
但是,根据http://grails-plugins.github.com/grails-spring-security-core/docs/manual/guide/16%20Filters.html
因此,对于与之前规则之一不匹配的网址,您需要一个/ ** catch-all规则。
这就是为什么我不明白为什么请求仍然遍及任何/ myapi /的所有过滤器。
我做了一些测试,这可能有所帮助:
如果我只在Config.groovy中创建一个会话:
grails.plugins.springsecurity.filterChain.chainMap = [
'/myapi/**': 'JOINED_FILTERS,-securityContextPersistenceFilter,-logoutFilter,-authenticationProcessingFilter,-securityContextHolderAwareRequestFilter,-rememberMeAuthenticationFilter,-anonymousAuthenticationFilter,-exceptionTranslationFilter'
]
但它也没有为其他网址创建会话,没有使用任何其他过滤器,这导致应用程序无法正常工作。这个例子只是为了确保会话不是由/ myapi / something请求创建的
如果我有:
grails.plugins.springsecurity.filterChain.chainMap = [
'/myapi/**': 'JOINED_FILTERS'
]
然后,它遍历所有/ myapi / something请求的所有过滤器并创建会话。它不会对其他请求使用任何过滤器。这是例外行为。
非常感谢你的帮助,我现在已经和它斗争了一段时间了,任何想法都会受到欢迎!
非常感谢!祝你有个美好的一天。
答案 0 :(得分:4)
grails.plugins.springsecurity.filterChain.chainMap = [
'/apitest/**': 'requestContextAttributesFilter,sessionPreventionFilter,objectRepositoryCreationFilter',
'/api/**': 'requestContextAttributesFilter,sessionPreventionFilter,objectRepositoryCreationFilter,apiAuthenticationFilter',
'/**': 'requestContextAttributesFilter,securityContextPersistenceFilter,aisAuthenticationProcessingFilter'
]
当我访问'/ apitest / *'URL时,会执行catch-all规则的最后一个过滤器。当我创建一个带有一些虚拟过滤器的简单Grails项目时,我无法重现这个问题,这些过滤器只有一个println和一个类似的链图。对于简单的测试项目,过滤器按预期运行。由于在执行哪个过滤器时没有正确的日志记录以及原因,因此很难确定问题所在。很奇怪......
<强>更新强>
我能够使用Spring Security Core插件版本1.2.7.2重现此错误。但是,这个错误似乎在版本1.2.7.3中得到修复!
请参阅:http://jira.grails.org/secure/ReleaseNote.jspa?projectId=10229&version=13100
使用版本1.2.7.3似乎可以解决这个问题。