实体类:hr,要继承UserDetails,并实现里面的一些方法
package org.lizhen.vhrdemo.model;import com.fasterxml.jackson.annotation.JsonIgnore;import org.springframework.security.core.GrantedAuthority;import org.springframework.security.core.authority.SimpleGrantedAuthority;import org.springframework.security.core.userdetails.UserDetails;import java.util.ArrayList;import java.util.Collection;import java.util.List;import java.util.Objects;public class Hr implements UserDetails {private Integer id;private String name;private String phone;private String telephone;private String address;private Boolean enabled;private String username;private String password;private String userface;private String remark;private List<Role> roles;@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Hr hr = (Hr) o;return Objects.equals(username, hr.username);}@Overridepublic int hashCode() {return Objects.hash(username);}public List<Role> getRoles() {return roles;}public void setRoles(List<Role> roles) {this.roles = roles;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name == null ? null : name.trim();}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone == null ? null : phone.trim();}public String getTelephone() {return telephone;}public void setTelephone(String telephone) {this.telephone = telephone == null ? null : telephone.trim();}public String getAddress() {return address;}public void setAddress(String address) {this.address = address == null ? null : address.trim();}public void setEnabled(Boolean enabled) {this.enabled = enabled;}public String getUsername() {return username;}@Overridepublic boolean isAccountNonExpired() {return true;}@Overridepublic boolean isAccountNonLocked() {return true;}@Overridepublic boolean isCredentialsNonExpired() {return true;}@Overridepublic boolean isEnabled() {return enabled;}public void setUsername(String username) {this.username = username == null ? null : username.trim();}@Override@JsonIgnorepublic Collection<? extends GrantedAuthority> getAuthorities() {List<SimpleGrantedAuthority> authorities = new ArrayList<>(roles.size());for (Role role : roles) {authorities.add(new SimpleGrantedAuthority(role.getName()));}return authorities;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password == null ? null : password.trim();}public String getUserface() {return userface;}public void setUserface(String userface) {this.userface = userface == null ? null : userface.trim();}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark == null ? null : remark.trim();}}

HrService:需要继承UserDetailsService
@Service
public class HrService implements UserDetailsService {
@Autowired
HrMapper hrMapper;
@Autowired
HrRoleMapper hrRoleMapper;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Hr hr = hrMapper.loadUserByUsername(username);
if (hr == null) {
throw new UsernameNotFoundException("用户名不存在!");
}
hr.setRoles(hrMapper.getHrRolesById(hr.getId()));
return hr;
}
}

loadUserByUsername()内部调用userMapper的loadUserByUsername(),这是自己写的。是为了从数据库里查询相关信息。查出来后,交给springSecurity去对比密码就好了。
