目录

  • 1 回顾
  • 2 自定义的登录的逻辑
  • 3 UserDetailsService接口
  • 4 PasswordEncoder密码解析器详解
  • 5 自定义登录逻辑

1 回顾

之前的,在配置里面,我们也可以配置数据源,从数据库里面拿用户名和密码

这个认证配置里面,修改一下这个方法,变为数据源的就可以

springboot 数据库mysql 应采用口令密码技术生物技术等两种或两种以上组合的_解析器

但是我们还有另外的方法,也就是现在我们想要自定义登录判断的逻辑,现在是自定义逻辑,之前只要配置之后,springsecurity框架自己给你判断是不是对应的用户,判断的逻辑是框架给你的,现在我们想要自己判断,这个咋处理。以下是步骤

2 自定义的登录的逻辑

1 导入依赖

只要导入依赖之后就可以使用,这个是简单的使用,有默认的登录页面,这个依赖是
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

3 UserDetailsService接口

如果需要自定义逻辑时,只需要实现UserDetailsService接口即可。也就是我们不想要使用框架给我们的登录页面,不想要默认的登录名和密码,需要我们自己设定,那么就需要使用这个接口

也就是要自定义用户登录逻辑,必须要实现这个UserDetailsService接口,返回值也是一个接口UserDetails,但是返回值是接口我们不能使用,所以使用他的实现类,有很多的实现类,我们使用user类,这个类下面有很多的方法。

我们只需要判断用户名,密码是这个框架给我们自己进行验证的,不需要我们做,因为这个框架要给前段传过来的密码进行加密,所以需要框架自己做

4 PasswordEncoder密码解析器详解

这个框架会给我们的密码进行加密,之后再和数据库中的密码进行比较。那么是如何加密的呢?

Spring Security要求容器中必须有PasswordEncoder实例(客户端密码和数据库密码是否匹配是由Spring Security 去完成的,Security中还没有默认密码解析器)。所以当自定义登录逻辑时要求必须给容器注入PaswordEncoder的bean对象.

PaswordEncoder是一个接口,里面有很多的方法,下面有很多的实现类,不同的加密算法是使用不同的实现类。

我们使用的是BCryptPasswordEncoder这个实现类

BCryptPasswordEncoder是Spring Security官方推荐的密码解析器,平时多使用这个解析器。

@SpringBootTest
@RunWith(SpringRunner.class)
public class MyTest {
    @Test
    public void test(){
        //创建解析器
        PasswordEncoder encoder = new BCryptPasswordEncoder();
        //对密码进行加密
        String password = encoder.encode("123");
        System.out.println("------------"+password);
        //判断原字符加密后和内容是否匹配
        boolean result = encoder.matches("123",password);
        System.out.println("============="+result);
    }
}

5 自定义登录逻辑

新建一个项目,导入spring security的依赖

在配置类里面实现密码的bean,这个是必须注入,因为框架要求的

@Bean
 public PasswordEncoder passwordEncoder() {
 return new BCryptPasswordEncoder();
 }

之后在业务层写登录的逻辑,这个逻辑要实现UserDetailsService接口,重写里面的方法

===============================================================

现在自定义登录页面
我们自己写一个页面,在controller层写登录的跳转页面,还需要在配置类,这个配置类要实现WebSecurityConfigurerAdapter接口,必须是这个接口,这个就是这个框架的接口,并且要实现这个方法
configure,这样在这个方法里面写框架的配置类就可以

springboot 数据库mysql 应采用口令密码技术生物技术等两种或两种以上组合的_java_02

现在自定义登录页面

我们自己写一个页面,在controller层写登录的跳转页面,还需要在配置类,这个配置类要实现WebSecurityConfigurerAdapter接口,必须是这个接口,这个就是这个框架的接口,并且要实现这个方法

configure,这样在这个方法里面写框架的配置类就可以

我们如果不写这个配置类,在登录的时候,还是默认的框架登录页面,走的流程就是,前端传过来的数据路径,先走这个控制类,没有就是走默认的控制类,默认的控制类就是默认的登录页面,不会走我们自定义的页面。走完配置类里面的逻辑之后,才会走controller层。

// 设置URL的授权问题
        // 多个条件取交集
        http.authorizeRequests()
                // 匹配 / 控制器  permitAll() 不需要被认证就可以访问
                .antMatchers("/").permitAll()   括号里面的路径,不用认证就可以直接到controller层
                // anyRequest() 所有请求   authenticated() 必须被认证
                .anyRequest().authenticated();其他的必须要走认证器才可以走