2 Spring Security中的UserDomainClass
Posted
技术标签:
【中文标题】2 Spring Security中的UserDomainClass【英文标题】:2 UserDomainClass in Spring Security 【发布时间】:2015-06-28 03:37:34 【问题描述】:在现有的 Grails 应用程序中,我有 2 个用户域,例如 UserAdmin 和 UserBasic。这两个域都有很少的公共字段和一些不同的字段(相对于域),目前登录/注销是分别使用两种类型的用户的会话来维护的。我想将 spring-security 集成到现有应用程序中。
最好的方法是什么?考虑到两个领域也有不同的领域。我们可以继承单个域中的两个域并将其用作 Spring Security 用户类吗?请提出建议。
【问题讨论】:
【参考方案1】:Spring Security Core 使用UserDetails
接口的实现之一作为经过身份验证的用户的投影。 Grails 提供例如GrailsUser
类:
https://github.com/grails-plugins/grails-spring-security-core/blob/master/src/java/grails/plugin/springsecurity/userdetails/GrailsUser.java
请记住,就 Grails 应用程序布局而言,此类不是“域”类 - 它不会持久保存在数据库中,它只是绑定到当前会话的用户的投影。
如果您有 2 个不同的域类代表您的应用程序中的用户,您可以尝试提供自己的 UserDetailsService
实现,例如
class CustomUserDetailsService implements UserDetailsService
@Override
UserDetails loadUserByUsername(String s) throws UsernameNotFoundException
// 1. Check if expected user is type of UserBasic
// 2. If not, check if expected user is type of UserAdmin
// 3. If nothing found, throw an exception
// 4. Otherwise create new GrailsUser instance using UserBasic or UserAdmin data
// 5. Return created GrailsUser instance
return null
然后您必须通过添加或修改 grails-app/conf/spring/resources.groovy
中的条目来注入您的实现,例如
// Place your Spring DSL code here
beans =
// other beans goes here
// ...
userDetailsService(CustomUserDetailsService)
这只是一个你可以开始的概念。
【讨论】:
谢谢希蒙!我会调查的。以上是关于2 Spring Security中的UserDomainClass的主要内容,如果未能解决你的问题,请参考以下文章
Grails 2.4.4 中的 Spring Security 插件问题
2 Spring Security中的UserDomainClass
漫谈Spring Security 在Spring Boot 2.x endpoints中的应用
Spring-Security-OAuth2 中的 grant_type