前端提的bug,说是账号被禁用时,提示的错误信息依然是”账号或者密码错误“。
确实应该让用户知道登录不上的准确原因。
找到登录失败处理的类,不出意外应该是继承 UsernamePasswordAuthenticationFilter的自定义类。
打几个断点,用被禁用的账号登录看看,最后发现进入下面的方法。
抛出的异常为
我们可以通过异常类型的检查,来区分不同的登陆失败原因、自定义提示信息。
@Override
protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException, ServletException {
if(failed instanceof DisabledException) {
ResponseUtils.out(response, R.fail(EmServiceError.LOGIN_FAIL, "当前账号已被禁用,请联系管理员"));
return;
}
ResponseUtils.out(response, R.fail(EmServiceError.LOGIN_FAIL));
}