找不到 grails /login/impersonate 页面

Posted

技术标签:

【中文标题】找不到 grails /login/impersonate 页面【英文标题】:grails /login/impersonate page not found 【发布时间】:2021-06-23 22:08:06 【问题描述】:

我正在使用 grails spring-security-core 和 spring-security-ui 插件,但无论我做什么,我都无法让切换用户工作,我总是得到:

错误:找不到页面 (404) 路径:/login/impersonate

我的 application.groovy 中有这个:

grails.plugin.springsecurity.controllerAnnotations.staticRules = [
 ......
[pattern: '/login/**', access: ['permitAll']],
[pattern: '/logout/**', access: ['permitAll']],
[pattern: '/login/impersonate', access: ['permitAll']],
[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>

并试图以这种方式切换用户。但无论我做什么,我都会得到 page not found 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

【问题讨论】:

【参考方案1】:

尝试使用:

grails.plugin.springsecurity.useSwitchUserFilter = true 

不是:

grails.plugin.springsecurity.switchUser.useSwitchUserFilter = true 

【讨论】:

请尝试解释答案背后的基本原理以及为什么它会解决问题。 是的,你是对的。我一定是从某个地方复制了另一个,但它是错误的。

以上是关于找不到 grails /login/impersonate 页面的主要内容,如果未能解决你的问题,请参考以下文章

Grails 3 和 Heroku - 找不到阶段任务

Grails 控制台 - 找不到类?

grails发布插件错误“找不到加载插件资源[spring.resources]的类”

使用 grails 2.2.0 和资源插件找不到自定义 jquery css 图像

更新到 IntelliJ IDEA Ultimate 2016.2 后找不到 Grails 应用程序

在Grails外部使用GORM时,找不到会话错误