使用自定义的UserDetail类作为返回对象,代码如下
@Data
public class CustomUser implements Serializable, UserDetails {
private String username;
private String password;
private boolean state;
private List<GrantedAuthority> authorities;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return this.authorities;
}
@Override
public String getPassword() {
return this.password;
}
@Override
public String getUsername() {
return this.username;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
public CustomUser(String username, String password, boolean state, List<GrantedAuthority> authorities) {
this.username = username;
this.password = password;
this.state = state;
this.authorities = authorities;
}
}
用UserDetail的实例返回值没问题 一但使用我自己定义的CustomUser作为返回对象就会报空值异常。
@Service
public class CustomUserDetailService implements UserDetailsService {
@Autowired
private UsersDao usersDao;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
if (StringUtils.isEmpty(username)) {
throw new NullPointerException("CustomUserDetailService.loadUserByUsername :空值异常!");
}
UsersPOJO user = usersDao.selectOneByUseremailUsersPojo(username);
if (StringUtils.isEmpty(user)) {
throw new UsernameNotFoundException("用户不存在!");
}
return new User(user.getUseremail(), user.getPassword(), new ArrayList<>());
}
}