通常我们会配置一个登陆过滤器去继承UsernamePasswordAuthenticationFilter类,并重写
attemptAuthentication、successfulAuthentication、unsuccessfulAuthentication这三个方法;其中successfulAuthentication是验证完用户名和密码后生成token后登陆成功的方法,而unsuccessfulAuthentication方法是登陆失败后调用的方法;
但是我在测试时发现登陆失败后并不会走到 unsuccessfulAuthentication 这个方法而是直接跑出异常
org.springframework.security.authentication.BadCredentialsException: Bad credentials
最后在网上寻找答案才发现在 attemptAuthentication 方法中使用了try catch的原因,其实当这里接受的用户信息与数据库不匹配时他会直接抛出异常然后走到unsuccessfulAuthentication 方法中,当使用了try catch后就会走到catch中而走不进登陆失败的方法中了,这里默认就是抛出异常后直接进入unsuccessfulAuthentication方法,所以把trycatch去掉就可以了