1、默认的登录页面的用户名输入框的name属性必须为“username”
<input type="text" class="form-control" id="userid" name="username" placeholder="请输入学号"/>
2、在实现UserDetailsService的类中,重写的loadUserByUsername方法的返回值必须符合org.springframework.security.core.userdetails.User的构造方法。
public class CustomUserService implements UserDetailsService { @Autowired SysUserServer sysUserServer;//JPA实现类 @Override public UserDetails loadUserByUsername(String userId){//参数必须是String SysUser user=sysUserServer.userLogin(userId); if(user==null){ throw new UsernameNotFoundException("用户不存在"); } return new User(//详情看User源码 user.getUserId(), user.getPassword(), getAuthorities(user.getRoles()) ); } private static List<GrantedAuthority> getAuthorities (List<SysRole> roles) { List<GrantedAuthority> authorities = new ArrayList<>(); for (SysRole role:roles){ authorities.add(new SimpleGrantedAuthority(role.getName())); } return authorities; } }