前段时间学java的时候,跟着B站老师的视频(BV1aY411c7d1)敲了一遍疫情管理项目,调试的时候发现如果密码故意输错,会卡在登陆页面持续登陆中,查询资料后发现是由于数据库会自动加密,所以导致shiro认证失败
用了诸多办法无果,本菜鸟无奈用try catch抛异常,可以暂时解决,下面是我的代码希望可以帮到跟我有同样疑惑的新手们,同时欢迎有更好的解决方案让我学习一下┭┮﹏┭┮
Controller-LoginController中
@RequestMapping("/login/login")
@ResponseBody
public DataView login(String username,String password,String code,HttpSession session){
DataView dataView=new DataView();
//1.判断验证码是否正确
String sessionCode=(String) session.getAttribute("code");
if (code!=null && sessionCode.equals(code)) {
//2.session普通登录逻辑
// User user=userService.login(username,password);
//shiro登录
try {
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
subject.login(token);
User user = (User) subject.getPrincipal();
//3.判断
if (user != null) {
dataView.setCode(200);
dataView.setMsg("登陆成功!");
session.setAttribute("user", user);
return dataView;
} }
catch (Exception ex) {
dataView.setCode(100);
dataView.setMsg("用户名或密码错误!");
return dataView;
}
}
dataView.setCode(100);
dataView.setMsg("验证码错误!");
return dataView;
}