Grails 3 Spring 安全插件

Posted

技术标签:

【中文标题】Grails 3 Spring 安全插件【英文标题】:Grails 3 Spring Security Plugin 【发布时间】:2016-07-15 17:46:25 【问题描述】:

我正在使用 Grails 3 和 Spring Security 插件进行身份验证。

当我在浏览器中手动点击以下网址时:

http://localhost:8080/cool-0.1/

我得到登录页面,并且我可以成功验证,推断我正确输入了我的用户名/密码组合。

问题:

如果我使用原始链接导航到我的页面,没有正斜杠(即:http://localhost:8080/cool-0.1 而不是http://localhost:8080/cool-0.1/),我完全绕过了安全性,并且能够在没有身份验证的情况下看到主页。 (是的,我清除缓存,关闭所有窗口等)

我的 url 映射包含以下代码:

"/"(controller: "home", action: "index")

我的 spring security groovy 文件包含以下代码:

grails.plugin.springsecurity.controllerAnnotations.staticRules = [
    [pattern: '/login/**', access: ['permitAll']],
    [pattern: '/error', access: ['permitAll']],
    [pattern: '/**', access: 'isAuthenticated()']
]
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: '/**', filters: 'JOINED_FILTERS']
]

我看不到我在这里缺少什么。为什么这两种情况会导致问题? Spring Security Grails 3 的文档没有提到任何有用的解决这个问题。

【问题讨论】:

【参考方案1】:

解决方案是使用**模式:

[pattern: '**', access: 'isAuthenticated()'],

提供的文档说 /** 和 ** 的使用是相同的,但是,通过使用两者进行实验,显然不是。

【讨论】:

以上是关于Grails 3 Spring 安全插件的主要内容,如果未能解决你的问题,请参考以下文章

Groovy:使用 Grails 和 Spring 安全核心插件时出现意外令牌

在 Grails Spring 安全核心插件中配置了两次 Spring 安全核心框架

Grails,从 Acegi 升级到 Spring 安全插件

Grails spring安全核心插件:如何删除ajax请求的浏览器提示

grails 2.4.0.M1 中的 spring 安全插件出错

带有 grails 的 Spring Security 核心插件