springsecurity-基本原理(过滤器链)
接下来介绍下两个接口:UserDatailsService 和 PasswordEncoder ,下面依次来介绍:
我们需要实现这个接口,接口中让我们实现一个方法,而我们操作数据库查找用户名和密码的代码就写在这个方法里面。
来,我们来梳理之前的知识,之前讲过一个类:UserNamePasswordAuthenticationFilter,这个类中有3个方法:
attemptAuthentication():这个方法内部是用来获取 表单的 用户和密码的 ,并判断用户名和密码是使用默认的还是我们自定义的
successfulAuthentication():认证成功后 调用的方法
unsuccessfulAuthentication():认证失败后 调用的方法
如果我们对 这3个方法里面的不满意,可通过继承UserNamePasswordAuthenticationFilter来重写。
一般是调用attemptAuthentication()拿到用户名和密码,如果是自定义用户名和密码的,后面就会调用 UserDatailsService 的 一个方法,因此我们需要实现该接口并重写该方法,该方法会返回一个实体类对象,我们的指定或查询出来的用户名和密码要封装在这里面,后面会对比这个实体类里的用户名和密码和 页面传过来 的进行对比。
上面的接口其实就是一个加密用的。