如何防止 Grails 3 创建会话?
Posted
技术标签:
【中文标题】如何防止 Grails 3 创建会话?【英文标题】:How can I prevent Grails 3 from ever creating a session? 【发布时间】:2016-09-10 13:55:18 【问题描述】:我有一个 Grails 3.1 应用程序并使用 spring 安全插件,并带有一个自定义的无状态身份验证提供程序。这一切都有效,但是当没有会话和创建会话(带有会话 ID cookie)时,我仍然会重定向到我的登录屏幕。
如何指示 Spring Security 永远不要使用 cookie,或者让 grails 永远不允许创建它们?我已经看到了一些关于普通弹簧安全的答案,但是使用 Grails 弹簧安全插件,事情似乎有所不同。
【问题讨论】:
【参考方案1】:Spring Security 插件与过滤器一起使用,其中一个可能会将您重定向到登录页面。我不知道您是如何自定义身份验证的,但基于Spring Security REST Plugin,您应该从过滤器链中删除您不需要的那些。
grails.plugin.springsecurity.filterChain.chainMap = [
//Stateless chain
[
pattern: '/api/**',
filters: 'JOINED_FILTERS,-anonymousAuthenticationFilter,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter'
],
//Traditional chain
[
pattern: '/**',
filters: 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter'
]
]
【讨论】:
谢谢,通过这种方法,我已经能够避免身份验证需要会话,即在我设置了令牌且没有会话的情况下,我不再被重定向回登录页面。但是,尽管我有一个自定义的 LoginController 和视图,但仍然坚持创建会话然后我被重定向到登录页面。有什么想法可以做到吗? 不。但是把spring security日志的级别设置为debug,说不定对你有帮助。【参考方案2】:看来您至少需要将以下 Spring Security 属性设置为 false 才能正确禁用会话创建。
application.groovy
grails.plugin.springsecurity.scr.allowSessionCreation = false
grails.plugin.springsecurity.scpf.forceEagerSessionCreation = false
grails.plugin.springsecurity.apf.allowSessionCreation = false
您可以在 Grails Spring Security 插件documentation website 中获得更多信息。
【讨论】:
以上是关于如何防止 Grails 3 创建会话?的主要内容,如果未能解决你的问题,请参考以下文章