grails /登录/模拟页面未找到

问题描述 投票:0回答:2

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

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

我的应用程序中有这个。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>

并尝试以这种方式切换用户。但无论我做什么,我都会收到页面未找到 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

spring grails spring-security grails-orm grails-plugin
2个回答
2
投票

尝试使用:

grails.plugin.springsecurity.useSwitchUserFilter = true 

不是:

grails.plugin.springsecurity.switchUser.useSwitchUserFilter = true 

0
投票

我从 Grails 3 升级到 5,离开模拟会话导致 404。我发现了这个 https://github.com/404labfr/laravel-impersonate/issues/134 更改我的链接到

    <sec:ifSwitched>
       <form method="post" action="${request.contextPath}/logout/impersonate">
           <button class="btn btn-link" type="submit">
               Resume as <sec:switchedUserOriginalUsername/>
           </button>
        </form>
   </sec:ifSwitched>
© www.soinside.com 2019 - 2024. All rights reserved.