gpt4 book ai didi

grails - Spring Security Grails插件授权

转载 作者:行者123 更新时间:2023-12-02 14:55:18 25 4
gpt4 key购买 nike

背景

我正在使用Spring Security Grails插件。因为我的User和Role类不是GORM对象,所以我用自己的实现替换了插件提供的UserDetailsService:

class CustomUserDetailsService implements UserDetailsService {

static transactional = false
private static final log = LogFactory.getLog(this)

@Autowired
private UserManager userManager

@Autowired
private RoleManager roleManager

UserDetails loadUserByUsername(String username) {
User user = userManager.getUserByEmail(username)
UserDetails userDetails = new UserAdapter(user, roleManager)

log.debug "user '$username' has roles: ${userDetails.authorities?.authority}"
userDetails
}
}

问题

登录时,我看到 CustomUserDetailsService.loadUserByUsername()记录了以下消息

user 'a5511120@nepwk.com' has roles: [USER]



因此,似乎已为用户分配了USER角色。但是,当我随后尝试访问此 Controller 的操作时:
@Secured(['ROLE_USER', 'ROLE_ADMINISTRATOR'])
class MyProfileController {
def someAction = { // impl omitted }
}

我跳到拒绝访问页面。我非常确定该用户已登录,因为拒绝访问页面包含诸如以下的标记
<sec:ifLoggedIn>
protected content
</sec:ifLoggedIn>

并显示 protected 内容。因此,当执行 Controller 授权时,似乎USER角色与当前用户不相关。日志消息表明 UserDetailsService正常。

最佳答案



解决方案是根据注释参数,确保域类/数据库中的角色名称以“ROLE_”开头。

致谢

此答案的全部功劳归于@BurtBeckwith和@tim_yates,他们在评论中提供了解决方案。我会将他们的评论转换为答案,因为将来的读者可能会很容易错过他们的评论。

关于grails - Spring Security Grails插件授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7590564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com