查找具有特定 spring 安全角色的用户
Posted
技术标签:
【中文标题】查找具有特定 spring 安全角色的用户【英文标题】:Find user with specific spring security role 【发布时间】:2012-10-26 08:06:56 【问题描述】:我有以下几点:
def userInstance=User.findAll("from User u where u.merchant is not null and u.merchant.id = ? and u.authorities.authority.contains('ROLE_MERCHANT')", merchantId)
并得到以下错误:
org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: ( near line 1, column 121 [from com.testing.tests.User u where u.merchant is not null and u.merchant.id = ? and u.authorities.authority.contains('ROLE_MERCHANT')]
at $Proxy20.createQuery(Unknown Source)
at testing.admin.UserService.findByMerchantId(UserService.groovy:14)
如何只返回具有特定角色的用户?
谢谢
【问题讨论】:
【参考方案1】:如果您查看User#getAuthorities
的默认实现,您会注意到该属性本身是通过动态查找器调用实现的:
UserRole.findAllByUser(this).collect it.role as Set
因此在HSQL查询中不能引用authorities
,但是可以通过UserRole
关联域类通过多种方式查询具有特定角色的用户:
def users = UserRole.withCriteria
role
eq 'authority', 'ROLE_SOMETHING'
projections
property 'user'
或
def users = UserRole.findAllByRole(domainRole)?.user
【讨论】:
我正在尝试 withCriteria 版本,但由于select this_.user_id as y0_ from user_role this_ where (role_alias1_.authority=?)
而出现 SQLGrammarException。我认为 role_alias1_ 应该是 this_ (或反之亦然),但无法弄清楚为什么它会像这样生成。任何指针?
这对我几分钟前遇到的问题非常有帮助,我可以按照逻辑进行操作,但我不需要使用角色 ... 来查询关联以上是关于查找具有特定 spring 安全角色的用户的主要内容,如果未能解决你的问题,请参考以下文章
具有特定表角色的spring security UserDetailsService