Grails - Spring Security REST - 302 响应网络::ERR_TOO_MANY_REDIRECTS
Posted
技术标签:
【中文标题】Grails - Spring Security REST - 302 响应网络::ERR_TOO_MANY_REDIRECTS【英文标题】:Grails - Spring Security REST - 302 Response net::ERR_TOO_MANY_REDIRECTS 【发布时间】: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 你的插件叫什么名字?可以发一下链接吗? 【参考方案1】:您必须删除记住我的过滤器。
这样使用:
'/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter'
这个..“错误”只有在您之前使用过常规 Spring Security 的应用程序时才会发生,因为这样您将拥有一个 cookie,它会劫持整个过滤过程并尝试让您登录(并重定向您),在自定义的 rest 插件过滤器和原始的 spring 安全之间进行重定向战争。
【讨论】:
以上是关于Grails - Spring Security REST - 302 响应网络::ERR_TOO_MANY_REDIRECTS的主要内容,如果未能解决你的问题,请参考以下文章
grails-spring-security-rest 插件和悲观锁定
Grails + spring-security-core:用户登录后如何分配角色?