Grails Security 3.1.2具有角色ROLE_ADMIN的用户登录将ROLE_NO_ROLES显示为权限

时间:2017-05-12 02:54:46

标签: grails grails-spring-security

我正在使用Sec插件3.1.2测试Grails 3.2.9。

在bootstrap中创建了一个角色为ROLE_ADMIN的用户,并在interceptUrlMap上为测试控制器添加了权限" note"。成功登录该用户后,我在日志中看到我的管理员已经使用ROLE_NO_ROLES并被拒绝访问笔记控制器。

  

用户,角色和用户角色关联在数据库中。

  def adminRole = Role.findOrSaveByAuthority('ROLE_ADMIN')
  def admin = new User(username: 'admin', password: 'admin').save()
  UserRole.create admin, adminRole
  

application.groovy

grails.plugin.springsecurity.userLookup.userDomainClassName = 'com.cabolabs.security.User'

grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'com.cabolabs.security.UserRole'
grails.plugin.springsecurity.authority.className = 'com.cabolabs.security.Role'
grails.plugin.springsecurity.authority.groupAuthorityNameField = 'authorities'
grails.plugin.springsecurity.useRoleGroups = true

...

grails.plugin.springsecurity.interceptUrlMap = [
    [pattern: '/note/**',        access: ['ROLE_ADMIN']],
    [pattern: '/patient/**',     access: ['ROLE_ADMIN']],
    [pattern: '/login/**',       access: ['permitAll']],
    [pattern: '/logout',         access: ['permitAll']],
    [pattern: '/logout/**',      access: ['permitAll']],
    [pattern: '/dbconsole/**',   access: ['permitAll']],
    [pattern: '/**',             access: ["IS_AUTHENTICATED_FULLY"]]
]

...
  

登录后,当我尝试转到/ note / index

时记录
2017-05-11 23:32:15.793 DEBUG --- [nio-8091-exec-4] o.s.s.w.a.i.FilterSecurityInterceptor    : Previously Authenticated: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@8d34560b: Principal: grails.plugin.springsecurity.userdetails.GrailsUser@586034f: Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_NO_ROLES; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@166c8: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: F0902A19E19C23D30B452C332C6C5728; Granted Authorities: ROLE_NO_ROLES
2017-05-11 23:32:15.793 DEBUG --- [nio-8091-exec-4] o.s.s.a.h.RoleHierarchyImpl              : getReachableGrantedAuthorities() - From the roles [ROLE_NO_ROLES] one can reach [ROLE_NO_ROLES] in zero or more steps.
2017-05-11 23:32:15.805 DEBUG --- [nio-8091-exec-4] tContextHolderExceptionTranslationFilter : Access is denied (user is not anonymous); delegating to AccessDeniedHandler

有关正在发生的事情的任何想法?

尝试在Sec插件文档中找到指针,但它只提到ROLE_NO_ROLES一次,并在用户没有角色时分配,这不是这种情况。

1 个答案:

答案 0 :(得分:0)

如果您使用useRoleGroups = true,则必须使用以下命令填充数据库:

Role adminRole = new Role("ROLE_ADMIN").save()
RoleGroup adminGroup = new RoleGroup("GROUP_ADMIN").save()
RoleGroupRole.create(adminGroup, adminRole, true)
User user = new User("<username>", "<password>").save()
UserRoleGroup.create(user, adminGroup, true)

而不是

def adminRole = Role.findOrSaveByAuthority('ROLE_ADMIN')
def admin = new User(username: 'admin', password: 'admin').save()
UserRole.create admin, adminRole
相关问题