在 Grails 的 Spring Security Rest Plugin 中注销时出现 404

Posted

技术标签:

【中文标题】在 Grails 的 Spring Security Rest Plugin 中注销时出现 404【英文标题】:404 when do logout in Spring Security Rest Plugin for Grails 【发布时间】:2017-06-04 07:43:50 【问题描述】:

我正在为 Grails 2.4.4 使用 Spring Security Rest Plugin v1.5.4(使用 spring security core 2.0.0)在我的项目(Grails - Angularjs)上设置安全系统。关于这个插件的文档可以在here找到。

我正在使用 postman chrome rest 客户端测试登录和注销,我可以正常登录,但我在注销时收到 404。

在文档中明确表示:

注销过滤器公开了一个用于删除令牌的端点。它会 从 HTTP 标头中读取令牌。如果找到,将从中删除 存储,发送 200 响应。否则,它将发送 404 回应

您可以使用以下属性在 Config.groovy 中对其进行配置:

配置键....................... .............................默认 价值

grails.plugin.springsecurity.rest.logout.endpointUrl......................./api/logout grails.plugin.springsecurity.rest.token.validation.headerName....X-Auth-Token

因此,在成功登录后,我尝试使用 GET 方法注销该 url (my_host_url/api/logout) 并发送标头 X-Auth-Token 使用我之前从登录获得的令牌。

但我一直收到 404。见下图

编辑:我正在这样设置链图(为了获得无状态行为):

grails.plugin.springsecurity.filterChain.chainMap = [
        '/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter',  // Stateless chain
        '/**': 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter'                                                                          // Traditional chain
]

所以。我在这里做错了什么,或者我错过了什么?

提前致谢!

【问题讨论】:

您能否提供“注销”方法的代码,我认为,资源映射缺少“获取”方法或正确的“路径” @devbd,感谢您的回复!实际上我没有实现logout 方法。我认为插件将其隐式添加为login 方法。对吗? 请检查插件默认登录网址。我认为,网址应该只是“/logout”.. 我的错误..,请检查 grails.plugin.springsecurity.filterChain.chainMap 是否设置为“无状态” 5.2.插件配置alvarosanchez.github.io/grails-spring-security-rest/latest/docs 【参考方案1】:

您错过了文档中的另一个摘录。这是您引用的块之前的警告消息,并说:

使用 JWT 令牌(默认策略)时无法注销,因为服务器中不会​​保留任何状态。

如果您仍然想要注销,您可以通过创建JwtTokenStorageService 的子类并覆盖方法storeTokenremoveToken 来提供自己的实现。然后,在resources.groovy 中将您的实现注册为tokenStorageService

【讨论】:

嗨,@Álvaro Sánchez-Mariscal,是否有推荐的教程来教授如何使用 JwtTokenStorageService 的子类实现注销功能?我知道当我将 Spring Security Rest 与 GORM 一起使用时,注销功能可以完美运行。另外,感谢伟大的插件:) 我不知道

以上是关于在 Grails 的 Spring Security Rest Plugin 中注销时出现 404的主要内容,如果未能解决你的问题,请参考以下文章

Spring 3.0 - 无法找到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/securit

Spring 3.0 - 无法找到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/securit

Grails 3 Spring Security 覆盖登录表单

在 Spring Security 登录期间设置 Grails/Spring Locale - 如何?

Grails,从 Acegi 升级到 Spring 安全插件

在 grails 中使用 spring-security 插件时出错