【问题标题】:Grails Spring Security plugin: Getting 302 for Ajax Request for timedout SessionGrails Spring Security 插件:Getting 302 for Ajax Request for timeout Session
【发布时间】:2014-05-28 16:48:54
【问题描述】:

我们使用 Spring Security 插件版本 1.2.7.3 和 Grails 2.2.1。 在我的Config.groovy 中,我这样做了:

grails.plugins.springsecurity.auth.ajaxLoginFormUrl = "/mylogin/authAjax"

认为,当有 Ajax 请求时,如果用户的 HttpSession 超时,Spring Security 将在 MyloginController 中调用 authAjax()

根据文档,我确保标头 X-Requested-With 的值为 XMLHttpRequest 在 Ajax 请求中,因此插件知道它是 Ajax 请求。

我的期望是 authAjax() 将被调用,我可以让它返回 401,所以 UI 知道它需要弹出另一个登录屏幕。

但是,不是调用 authAjax(),而是将 302 返回到 UI,并将位置字段设置为 http://localhost:8080/MyApplication/mycontroller/authAjax

这意味着我必须在我的 UI 上添加一些非常老套的东西,检查 302 并检查位置字段,然后让用户重新登录。我更希望返回 401。

任何想法我做错了什么?

谢谢一百万。

【问题讨论】:

  • 可能是您的 authAjax 网址不允许所有人使用。
  • 你解决了这个问题吗?

标签: grails spring-security grails-plugin


【解决方案1】:

如果其他人有这个问题,我发现它只是由于 chainMap 规则。 我的 REST api 位于 '/api/' url 下,所以我的 chainMap 看起来像这样:

grails.plugin.springsecurity.filterChain.chainMap = [
    [pattern: '/assets/**',      filters: 'none'],
    [pattern: '/**/js/**',       filters: 'none'],
    [pattern: '/**/css/**',      filters: 'none'],
    [pattern: '/**/images/**',   filters: 'none'],
    [pattern: '/**/favicon.ico', filters: 'none'],
    [pattern: '/api/**',         filters: 'JOINED_FILTERS,-anonymousAuthenticationFilter,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter'], // Stateless API
    [pattern: '/**',             filters: 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter'] // Traditional, session based accesses.
]

最后两行是重要的; '/api/**' 由 Spring Security REST 插件保护,该插件是一个无状态连接(即每个请求都带有身份验证令牌)。 '/**' 规则涵盖了需要有状态会话(非 REST 活动)的所有其他内容。 如果令牌已过期或以任何方式无效,则无状态 REST 请求将返回 402,而有状态的非 REST 请求将返回 302 并循环发送您的浏览器。

以正确的顺序获取这些规则,你应该没问题。

【讨论】:

    猜你喜欢
    • 2015-03-26
    • 2016-05-24
    • 2011-08-15
    • 2016-03-23
    • 2012-09-29
    • 2017-09-26
    • 1970-01-01
    • 2012-05-24
    • 2012-12-10
    相关资源
    最近更新 更多