🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**1. UserDetailsService接口** 当什么也没有配置的时候,账号和密码是由 Spring Security 定义生成的,而在实际项目中账号和密码都是从数据库中查询出来的,所以我们需要自定义逻辑,只需要实现 UserDetailsService 接口即可。 ```java /* org.springframework.security.core.userdetails.UserDetailsService */ public interface UserDetailsService { //var1为用户名 UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException; } ``` **2. UserDetails接口** ```java /* org.springframework.security.core.userdetails.UserDetails */ public interface UserDetails extends Serializable { //获取登录用户所有权限 Collection<? extends GrantedAuthority> getAuthorities(); //获取密码 String getPassword(); //获取用户名 String getUsername(); //判断账户是否过期 boolean isAccountNonExpired(); //判断账户是否被锁定 boolean isAccountNonLocked(); //凭证{密码}是否过期 boolean isCredentialsNonExpired(); //表示当前用户是否可用 boolean isEnabled(); } ``` **3. UserDetails接口实现类User** ```java /* org.springframework.security.core.userdetails.User */ public class User implements UserDetails, CredentialsContainer { //密码 private String password; //用户名 private final String username; //存储当前账号的权限与角色 private final Set<GrantedAuthority> authorities; //账号是否过期,true未过期,false已过期 private final boolean accountNonExpired; //账号是否被锁定,true未锁定,false已锁定 private final boolean accountNonLocked; //密码是否过期,true未过期,false已过期 private final boolean credentialsNonExpired; //账号是否可用,true可用,false不可用 private final boolean enabled; ... ```