问题描述
我正在使用 grails spring-security-core 和 spring-security-ui 插件,但无论我做什么,我都无法让切换用户工作,我总是得到:
错误:找不到页面 (404) 路径:/login/impersonate
我的 application.groovy 中有这个:
grails.plugin.springsecurity.controllerAnnotations.staticrules = [
......
[pattern: '/login/**',access: ['permitAll']],[pattern: '/logout/**',[pattern: '/login/impersonate',[pattern: '/logout/impersonate',access: ['permitAll']]
}
(我知道非常开放的权限,但只是想让它工作。)我也尝试添加:
grails.plugin.springsecurity.interceptUrlMap = [
[pattern: '/login/impersonate',access: ['permitAll']]
]
我在 application.groovy 中有这个设置:
grails.plugin.springsecurity.switchUser.useSwitchUserFilter = true
grails.plugin.springsecurity.ui.switchUserRoleName = 'ROLE_SWITCH_USER'
并且要加倍确定我把它放在我的 application.yml 中:
grails:
plugin:
springsecurity:
switchUser:
useSwitchUserFilter: true
ui:
switchUserRoleName: 'ROLE_SWITCH_USER'
我尝试使用角色为 ROLE_ADMIN 和 ROLE_SWITCH_USER 的用户登录,然后单击 spring-security-ui gui 插件中的标准“以用户身份登录”。我试过在浏览器中访问 http://localhost:8080/login/impersonate 。我试过将其添加到页面:
<sec:ifAllGranted roles='ROLE_SWITCH_USER'>
<form action='/login/impersonate' method='POST'>
Switch to user: <input type='text' name='username'/> <br/>
<input type='submit' value='Switch'/>
</form>
</sec:ifAllGranted>
并试图以这种方式切换用户。但无论我做什么,我都会得到页面未找到 404。
我尝试查看 spring-security-core 插件的源代码,但 LoginController.groovy 没有 impersonate() 方法。我猜它使用了一些魔法来到达 Spring 的 SwitchUserFilter。我试过在那里设置断点,但它似乎并没有停止。
在所有其他方面,grails spring 安全插件似乎运行良好且符合预期。但我被难住了。
使用 grails 4.0.9,org.grails.plugins:spring-security-core:4.0.3,org.grails.plugins:spring-security-ui:4.0.0.M1
解决方法
尝试使用:
grails.plugin.springsecurity.useSwitchUserFilter = true
不是:
grails.plugin.springsecurity.switchUser.useSwitchUserFilter = true