Grails - Spring Security REST - 302响应网:: ERR_TOO_MANY_REDIRECTS

时间:2014-07-25 16:38:44

标签: ajax rest grails spring-security restful-authentication

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

我已确保在标头中发送了正确的身份验证令牌,以下是请求中的代码段:

Request URL:http://localhost:8084/app/api/controller/
Accept:application/json, text/plain, */*
Authorization:Bearer <TOKEN>

在我的提交中查找我是否做错了,或者这可能是插件中的错误?

谢谢。

1 个答案:

答案 0 :(得分:2)

你必须删除记住我的过滤器。

像这样使用: '/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter'

这个''bug'只会在你之前使用过具有常规弹簧安全性的应用程序时发生,因为那时你会有一个cookie会劫持整个过滤器进程并尝试登录你(并重定向你),在自定义rest插件过滤器和原始spring安全性之间进行重定向战争。