【问题标题】:Grails - Spring Security REST - 302 Response net::ERR_TOO_MANY_REDIRECTSGrails - Spring Security REST - 302 响应网络::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 你的插件叫什么名字?可以发一下链接吗?

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


【解决方案1】:

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

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

这个..“错误”只有在您之前使用过常规 Spring Security 的应用程序时才会发生,因为这样您将拥有一个 cookie,它会劫持整个过滤过程并尝试让您登录(并重定向您),在自定义的 rest 插件过滤器和原始的 spring 安全之间进行重定向战争。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2015-05-04
    • 2014-11-02
    • 2015-09-19
    • 2016-05-24
    • 2017-11-06
    • 2016-01-11
    相关资源
    最近更新 更多