我使用的是Spring security + JPA +自定义UserDetailsService。好像我只能存储
String username, String password, boolean enabled, boolean accountNonExpired,
boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities
在User对象中。如果我需要在登录后在会话中疼痛我的自定义User对象,该怎么办?我想保存FIRST,LAST,公司和...... 谢谢!
答案 0 :(得分:3)
您可以定义自己的用户模型,并将所有首选属性添加到其中。然后将其包含在UserDetails
实施中,例如
public class UserModel {
private username;
private password;
private firstname;
private lastname;
.
.
.
etc
}
public class MyUserDetails implements UserDetails {
private UserModel user;
public UserModel getUser(){
return user;
}
@Override
public String getUsername(){
return user.getUsername();
}
@Override
public String getPassword(){
return user.getPassword();
}
}
每当您需要访问UserModel
个特定属性时,请使用getUser()
方法并直接访问您的特定字段
MyUserDetails myUserDetails = (MyUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserModel user = myUserDetails.getUser();
String firstname = user.getFirstname();
这种实现的好处在于您将安全性UserDetails
实现与您自己的User
实现分开,这可能是任何ORM框架(如Hibernate)的托管实体
答案 1 :(得分:0)
有一些很棒的教程,但是如果你想用github示例进行捷径检查,请查看这个问题。
Could not autowire field: private org.springframework.security.core.userdetails.UserDetailsService
它还有一个github代表,您可以访问以获取示例代码,它是与Sprin Sec dev lead合作完成的。