前端:
在前端页面输入username和password,通过地址login访问验证。
后台:
- 调用 AbstractAuthenticationProcessingFilter.doFilter()方法
原因:SpringSecurity对Spring Web项目提供支持,AbstractAuthenticationProcessingFilte 作为验证请求入口的
2.在AbstractAuthenticationProcessingFilter.doFilter()调用UsernamePasswordAuthenticationFilter中的attemptAuthentication()方法
2.1 该方法获取请求中带的参数username和password
2.2 将表单请求的信息(用户、密码等信息)赋值给 UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);
2.3 调用getAuthenticationManager().authenticate(authRequest)对用户密码的正确性进行验证。
3.调用ProviderManager中的authenticate()方法
3.1 根据用户名,查看缓存中是否存在用户实体对象
如果存在,只对密码进行验证,
如果不存在,先验证用户信息,执行DaoAuthenticationProvider中的retrieveUser方法,调用loadUserByUsername()方法,注意这里的loadUserByUsername()方法需要自定义类实现UserDetailsService接口并重写loadUserByUsername()方法,获取一个UserDetails对象。 然后一些属性验证之后,对用户密码进行验证。
4.调用passwordEncoder.isPasswordValid()方法验证密码,
该方法中调用matches()方法判断输入密码和数据库密码是否相同。
验证通过返回true,成功登录系统。