若依不分离日志解读(3)
想要看日志在哪记录
先查找登录日志
搜索/login
没有发现任何关与日志的线索那么会在哪呢?应该在自定义的realm里了
@PostMapping("/login")
@ResponseBody
// 将对象返回转换为json格式
public AjaxResult ajaxLogin(String username, String password, Boolean rememberMe)
{
//将前端获取到的信息,封装成一个Shiro中的用户名密码令牌对象
//这个令牌对象还实现了rememberMe记住我功能
UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
//Subject是Shiro的用户机制,用于安全验证等功能
//为了获取到Subject,我们通常使用SecurityUtils工具类
// package org.apache.shiro; 的工具类
// package org.apache.shiro.subject;
Subject subject = SecurityUtils.getSubject();
try
{
//用户验证,出错会抛出异常AuthenticationException
//其具体的异常在subject的实现类DelegatingSubject中具体制定
subject.login(token);
//调用父类BaseController的返回成功success方法
return success();
}
//验证码错误异常
catch (AuthenticationException e)
{
String msg = "用户或密码错误";
//判断是否有其他的错误
if (StringUtils.isNotEmpty(e.getMessage()))
{
//如果有,则替换成该错误
//比如验证码错误
msg = e.getMessage();
}
//将错误消息返回到前端
//@ResponseBody
//error的类型是AjaxResult,其本质是一个hashMap
return error(msg);
}
}
去自定义的realm
/**
* 登录认证
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException
{
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
// 从令牌中获取用户名
String username = upToken.getUsername();
String password = "";
// 获得密码
if (upToken.getPassword() != null)
{
password = new String(upToken.getPassword());
}
SysUser user = null;
// 进行校验
try
{
//在这里点进去
user = loginService.login(username, password);
}
catch (CaptchaException e)
{
throw new AuthenticationException(e.getMessage(), e);
}
catch (UserNotExistsException e)
{
throw new UnknownAccountException(e.getMessage(), e);
}
catch (UserPasswordNotMatchException e)
{
throw new IncorrectCredentialsException(e.getMessage(), e);
}
catch (UserPasswordRetryLimitExceedException e)
{
throw new ExcessiveAt