【发布时间】:2014-09-17 14:07:21
【问题描述】:
我正在使用grails-spring-security-rest 插件来保护我的rest api。
我无法使用插件通过 AJAX 成功调用其余 api。我收到一个 302 响应,导致重定向循环。
$.ajax({
url: "http://localhost:8084/app/api/controller",
type: "GET",
beforeSend: function(xhr){xhr.setRequestHeader('Authorization', 'Bearer <TOKEN>');},
});
我已经测试了未经身份验证的插件,删除了插件,一切正常。
我可以用 curl 成功调用其余的 api:
curl -i -H "Accept: application/json" -H "Authorization:Bearer <TOKEN>" http://localhost:8084/app/api/controller
我有以下配置:
BuildConfig.groovy
compile ':spring-security-core:2.0-RC3'
compile ":spring-security-rest:1.4.0.RC5", {
excludes: 'spring-security-core'
}
Config.groovy
grails.plugin.springsecurity.rest.login.useJsonCredentials = true
grails.plugin.springsecurity.rest.token.storage.useGorm = true
grails.plugin.springsecurity.rest.token.storage.gorm.tokenDomainClassName = 'com.app.security.AuthenticationToken'
grails.plugin.springsecurity.filterChain.chainMap = [
'/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter', // Stateless chain
'/**': 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter' // Traditional chain
]
我已确保在标头中发送了正确的身份验证令牌,这是来自请求的 sn-p:
Request URL:http://localhost:8084/app/api/controller/
Accept:application/json, text/plain, */*
Authorization:Bearer <TOKEN>
寻找我在提交时是否做错了什么,或者这可能是插件中的错误?
谢谢。
【问题讨论】:
-
我有同样的错误,cweston 你有没有找到任何地方?
-
@OliverTynes 我没有时间继续调查这个问题,所以我决定暂时不使用该插件。不过,我确实创建了一张票 here,如果您想跟进。
-
@OliverTynes 如果您能解决问题,请告诉我。
-
查看我的答案。在其他新闻中,我刚刚从头开始制作了自己的 auth 插件,它只使用原始的 @Secured 注释。我将尝试在 11 月初发布,它旨在成为 Spring 安全性的 REST 插件替代品。您基本上只需要搜索和替换 spring 安全注释导入以替换我的注释 + 更改 springSecurityService.ifAnyGranted() 以使用 restSecurityService.ifAnyGranted() 等。如果您是,您可以注入您自己的 userdetail 验证器和密码编码器不使用 bcrypt(我的插件中的标准)。
-
@OliverTynes 你的插件叫什么名字?可以发一下链接吗?
标签: ajax rest grails spring-security restful-authentication