我的spring security中有一个修改过的User类,它使用属性email而不是username。现在我想要一个切换用户的功能,因此管理员可以作为特定用户无缝登录而无需注销。我遇到了这个Link,它显示有一个switchUserFilter来实现这一点。所以我尝试通过将j_username作为电子邮件传递来使其工作,但它被重定向到空白页面并且用户不切换。
我已经尝试了所有这些东西,但仍然无法找到解决方法:
1)添加到Config.groovy:
grails.plugins.springsecurity.userLookup.usernamePropertyName='email
'
2)在User class getUserName()中创建一个方法以返回电子邮件。
P.S:我查看了springSecurity switchUserFilter(link)的源代码,并在第209行遇到了这段代码:
protected Authentication attemptSwitchUser(HttpServletRequest request)
throws AuthenticationException {
UsernamePasswordAuthenticationToken targetUserRequest;
String username = request.getParameter(usernameParameter);
但我不确定这是不是问题,也不想在插件中进行更改。
答案 0 :(得分:1)
默认情况下,SwitchUserFilter的 usernameParameter 属性设置为 username 。这似乎是你问题的一部分。
SwitchUserFilter有一个名为setUsernameParameter()的方法,允许您更改此默认值。过滤器似乎是一个bean,所以你可以在 grails-app / conf / spring / Config.groovy
中做这样的事情。def switchUserFilter
def init = { servletContext ->
switchUserFilter.usernameParameter = 'email'
}
或者在grails-app / config / BootStrap.groovy
中可能是这样的{{1}}
答案 1 :(得分:0)
终于找到了解决方案:将其添加到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)然后按照说明(here)更新视图以添加切换按钮