然后我就发现了一个问题,我自定义了realm,我打断点后发现不管是登录成功还是失败都是直接走的realm的 doGetAuthenticationInfo 方法,而没有进入loginController 里面的login方法,这点我非常疑惑,因为我发现网上的案例不管是谁都是有写login这个方法的,但是如果不经过这个方法就能完成认证的过程,那这个login方法为什么还要写呢?
我本来是以为如果登录失败shiro方面会自动转到login方法里,然后在login方法里可以验证是密码错误还是帐号不存在等问题,在将信息写到登录页面上。
请大家指点一下迷津。
6 个解决方案
#1
#2
上面是相关代码,请大神们帮我看看
#3
给你参考下我们的项目
try {
Subject subject = ShiroUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
subject.login(token);
} catch (UnknownAccountException e) {
return e.getMessage();
} catch (IncorrectCredentialsException e) {
return "账号或密码不正确";
} catch (LockedAccountException e) {
return "账号被锁定";
} catch (AuthenticationException e) {
return "账号验证失败";
}
return "sucess";
#4
我上面success写错了,不过不影响
#5
之前用的是springMVC做的,是跟拦截器有关系的,springboot不太了解,刚接触。shiro正常的话,调用一个subObject方法后,都走到doGetAuthenticationInfo 。猜测是直接被shiro配置的拦截器拦截了,没有被控制器拦截
#6
拦截器链放开 /login /index试试
#1
#2
上面是相关代码,请大神们帮我看看
#3
给你参考下我们的项目
try {
Subject subject = ShiroUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
subject.login(token);
} catch (UnknownAccountException e) {
return e.getMessage();
} catch (IncorrectCredentialsException e) {
return "账号或密码不正确";
} catch (LockedAccountException e) {
return "账号被锁定";
} catch (AuthenticationException e) {
return "账号验证失败";
}
return "sucess";
#4
我上面success写错了,不过不影响
#5
之前用的是springMVC做的,是跟拦截器有关系的,springboot不太了解,刚接触。shiro正常的话,调用一个subObject方法后,都走到doGetAuthenticationInfo 。猜测是直接被shiro配置的拦截器拦截了,没有被控制器拦截
#6
拦截器链放开 /login /index试试