我正在尝试自定义并向Spring Security Principal添加其他信息。正在浏览spring doc以及一些例如这个
How to add additional details to Spring Security userdetails
此示例显式将身份验证值设置为true。例如
boolean enabled = true;
boolean accountNonExpired = true;
boolean credentialsNonExpired = true;
boolean accountNonLocked = true;
List<String> roles = new ArrayList<String>();
roles.add(domainUser.getRole().getName());
return new CustomSpringUser(
domainUser.getUsername(),
domainUser.getPassword().toLowerCase(),
enabled,
accountNonExpired,
credentialsNonExpired,
accountNonLocked,
getGrantedAuthorities(roles),
***domainUser.getAccount().getIdentificationId())*** ;
而不是手动将accountNonExpired,credentialsNonExpired ...等设置为true。是否有可以检查User.Role并获取accountNontExpired..etc值的Authority方法?
我找到了另一个例子,他们也手动设置了权限....这是正确的方法吗?
http://javahotpot.blogspot.in/2013/12/spring-security-adding-more-information.html
由于
答案 0 :(得分:0)
您必须创建自己的用户模型作为常规用户模型的扩展(正如您所做的那样),您必须自己检索所需的信息。
使用Spring的数据库身份验证时,会从数据库的列中检索字段 accountNonExpired
,credentialsNonExpired
等。
使用Spring的数据库身份验证时,只需将accountNonExpired
,credentialsNonExpired
和accountNonLocked
设置为true
。从数据库中检索属性enabled
。
结论是:是的,您必须自己设置这些字段。
方法setAuthority(..)
设置Authentication
对象的权限对象,它是实际权限(在您的情况下是用户)的包装器。可以从Authentication
检索SecurityContextHolder
对象,并用于存储身份验证状态(例如,用户是否经过身份验证)。