[英]authorisation with Spring Security Grails plugin
我正在使用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()
记录以下消息
用户'a5511120@nepwk.com'具有以下角色:[USER]
因此,似乎已为用户分配了USER角色。 但是,当我随后尝试访问此控制器的操作时:
@Secured(['ROLE_USER', 'ROLE_ADMINISTRATOR'])
class MyProfileController {
def someAction = { // impl omitted }
}
我跳到拒绝访问页面。 我非常确定该用户已登录,因为拒绝访问页面包含诸如以下的标记
<sec:ifLoggedIn>
protected content
</sec:ifLoggedIn>
并显示受保护的内容。 因此,当执行控制器授权时,似乎USER角色与当前用户无关。 日志消息表明UserDetailsService
正常。
解决方案是根据注释参数,确保域类/数据库中的角色名称以“ ROLE_”开头。
此答案的全部功劳归于@BurtBeckwith和@tim_yates,他们在评论中提供了解决方案。 我正在将他们的评论转换为答案,因为将来的读者可能会很容易错过他们的评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.