Spring自定义userDetail设置用户权限

时间:2016-07-20 10:09:45

标签: spring security

我正在尝试自定义并向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

由于

1 个答案:

答案 0 :(得分:0)

您必须创建自己的用户模型作为常规用户模型的扩展(正如您所做的那样),您必须自己检索所需的信息。

使用Spring的数据库身份验证时,会从数据库的列中检索字段accountNonExpiredcredentialsNonExpired等。

使用Spring的数据库身份验证时,只需将accountNonExpiredcredentialsNonExpiredaccountNonLocked设置为true。从数据库中检索属性enabled

结论是:是的,您必须自己设置这些字段。

方法setAuthority(..)设置Authentication对象的权限对象,它是实际权限(在您的情况下是用户)的包装器。可以从Authentication检索SecurityContextHolder对象,并用于存储身份验证状态(例如,用户是否经过身份验证)。