1

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

我正在使用 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
]

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

提前致谢!

4

1 回答 1

1

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

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

如果您仍然想要注销,您可以通过创建一个子类JwtTokenStorageService并覆盖方法storeToken和来提供您自己的实现removeToken。然后,将您的实现注册resources.groovytokenStorageService.

于 2017-01-19T16:53:22.907 回答