1、前台页面点击登录后进入后台处理方法,在方法中使用用户名、密码创建token
创建Subject对象。调用login()方法
@PostMapping("/login")
@ResponseBody
public AjaxResult ajaxLogin(String username, String password, Boolean rememberMe) {
UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
Subject subject = SecurityUtils.getSubject();
try {
subject.login(token);
return success();
} catch (AuthenticationException e) {
String msg = "用户或密码错误";
if (StrUtil.isNotEmpty(e.getMessage())) {
msg = e.getMessage();
}
return error(msg);
}
}
2、Subject对象继承关系,调用的login()方法由DelegatingSubject实现
3、DelegatingSubject类中的login方法将登录处理交给了SecurityManager处理
4、在SecurityManager的实现类中由DefaultSecurityManager实现了login方法
5、DefaultSecurityManager类中的login方法调用了自己的authenticate方法,authenticate方法调用了authenticator的authenticate方法
public Subject login(Subject subject, AuthenticationToken t