以下配置基于spring boot版本1.4.2.RELEASE,默认引入的spring security版本为4.1.3.RELEASE,页面模板采用thymeleaf。
在MyUserDetailsService实现了UserDetailsService接口以后,在重写的loadUserByUsername方法里验证用户名不存在时,我们会抛出一个UsernameNotFoundException异常,比如:
throw new UsernameNotFoundException(“用户名不存在”);
但是返回页面以后, 发现并不能捕获这个异常信息,通过[[${session.SPRING_SECURITY_LAST_EXCEPTION.message}]]方式获得的异常信息始终是“Bad credentials”。
通过程序调试发现,系统在执行到throw new UsernameNotFoundException(“用户名不存在”)的时候,会执行DaoAuthenticationProvider类的retrieveUser方法:
protected final UserDetails retrieveUser(String username,
UsernamePasswordAuthenticationToken authentication)
throws AuthenticationException {
.............................
catch (UsernameNotFoundException notFound) {
if (authentication.getCredentials() != null) {
String presentedPassword = authentication.getCredentials().toString();