Grails 3 Spring 安全插件
Grails 3 Spring Security Plugin
我正在使用 Grails 3 和 Spring 安全插件进行身份验证。
当我在浏览器中手动点击以下 url 时:
http://localhost:8080/cool-0.1/
我得到了登录页面,我可以成功验证,推断我正确输入了我的用户名/密码组合。
问题:
如果我使用原始 link 导航到我的页面,没有正斜杠(即:http://localhost:8080/cool-0.1 和不是 http://localhost:8080/cool-0.1/ ) 我完全绕过了安全措施,无需身份验证就可以看到主页。 (是的,我清除缓存,关闭所有 windows,等等)
我的 url 映射包含以下代码:
"/"(controller: "home", action: "index")
我的 spring 安全 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 的文档没有提到任何有用的解决方法。
解决方案是使用 ** 模式:
[pattern: '**', access: 'isAuthenticated()'],
提供的文档说 /** 和 ** 的使用是相同的,但是,通过使用两者进行实验,显然不是。
我正在使用 Grails 3 和 Spring 安全插件进行身份验证。
当我在浏览器中手动点击以下 url 时:
http://localhost:8080/cool-0.1/
我得到了登录页面,我可以成功验证,推断我正确输入了我的用户名/密码组合。
问题:
如果我使用原始 link 导航到我的页面,没有正斜杠(即:http://localhost:8080/cool-0.1 和不是 http://localhost:8080/cool-0.1/ ) 我完全绕过了安全措施,无需身份验证就可以看到主页。 (是的,我清除缓存,关闭所有 windows,等等)
我的 url 映射包含以下代码:
"/"(controller: "home", action: "index")
我的 spring 安全 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 的文档没有提到任何有用的解决方法。
解决方案是使用 ** 模式:
[pattern: '**', access: 'isAuthenticated()'],
提供的文档说 /** 和 ** 的使用是相同的,但是,通过使用两者进行实验,显然不是。