簡體   English   中英

Grail的Spring安全性:使用電子郵件代替用戶名在SwitchUserFilter中切換用戶

[英]Grail's Spring security: Use email instead of username to switch users in SwitchUserFilter

我在春季安全性中有一個修改的User類,它使用屬性電子郵件代替用戶名。 現在,我想使用一種功能來切換用戶,以便管理員可以無縫登錄為特定用戶而無需注銷。 我遇到了這個Link ,它顯示有一個switchUserFilter可以實現此目的。 因此,我嘗試通過將j_username作為電子郵件傳遞來使其工作,但它被重定向到空白頁,並且用戶未切換。

我已經嘗試了所有這些方法,但是仍然找不到解決方法:1)添加到Config.groovy: grails.plugins.springsecurity.userLookup.usernamePropertyName='email '

2)在User類getUserName()中創建一個方法以返回電子郵件。

PS:我查看了springSecurity switchUserFilter( link )的源代碼,並在第209行遇到了此代碼:

protected Authentication attemptSwitchUser(HttpServletRequest request)
        throws AuthenticationException {
    UsernamePasswordAuthenticationToken targetUserRequest;

    String username = request.getParameter(usernameParameter);

但是我不確定這是否是問題,並且不想在插件中進行更改。

默認情況下,SwitchUserFilter的usernameParameter屬性設置為username 那似乎確實是您問題的一部分。

SwitchUserFilter有一個名為setUsernameParameter()的方法,可用於更改此默認設置。 似乎過濾器是一個bean,因此您可以在grails-app / conf / spring / Config.groovy中執行類似的操作

import org.springframework.security.web.authentication.switchuser.SwitchUserFilter

beans = {
    switchUserFilter {
        usernameParameter = 'email'
    }
}

或者也許在grails-app / config / BootStrap.groovy中是這樣的

def switchUserFilter

def init = { servletContext ->
        switchUserFilter.usernameParameter = 'email'
}

終於找到了解決方案:將其添加到config.groovy文件中

grails.plugin.springsecurity.userLookup.usernamePropertyName = 'email'
    grails.plugin.springsecurity.useSwitchUserFilter = true

    grails.plugin.springsecurity.controllerAnnotations.staticRules = [
    ....
    '/j_spring_security_switch_user': ['ROLE_SWITCH_USER', 'isFullyAuthenticated()'],
    '/j_spring_security_exit_user': ['isFullyAuthenticated()'],
    '/public/**':              ['permitAll']
    .....
    ]

2)然后在bootstrap.groovy中創建一個角色ROLE_SWITCH_USER

def switchUserRole = Role.findByAuthority('ROLE_SWITCH_USER') ?: new Role(authority: 'ROLE_SWITCH_USER').save(flush: true, failOnError: true)

並將其分配給超級用戶

3)然后按照說明( 此處 )更新視圖以添加開關按鈕

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM