SpringSecurity快速入门和自定义用户名、密码的实现

SpringSecurity自定义用户名和密码的实现

  • 在SpringBoot项目中导入SpringSecurity依赖
  • 自定义用户名和密码登录的实现
    • 第一种实现方式:配置文件的实现
    • 第二种实现方式:继承WebSecurityConfigurerAdapter类,并且将BCryptPasswordEncoder对象交给Spring容器管理。
    • 第三种:实现UserDetailsService接口,从数据库中查找用户名和密码
  • 【先到这里,下午继续写...】

在SpringBoot项目中导入SpringSecurity依赖

1、在SpringBoot项目中的pom.xml文件中添加SpringSecurity依赖

		<dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-securityartifactId>
        dependency>

2、启动SpringBoot项目中的启动类
在控制台中出现这个密码,这就是我们没有实现自定义密码,SpringSecurity帮我们自动生成的密码。
在这里插入图片描述
3、拿到这个密码后,我们就可以使用SpringSecurity为我们自动生成的账号和密码登录了
SpringSecurity快速入门和自定义用户名、密码的实现_第1张图片


出现下面的页面说明我们已经登录成功了(因为我没有写任何东西,所以页面会出现404异常)。
SpringSecurity快速入门和自定义用户名、密码的实现_第2张图片

自定义用户名和密码登录的实现

自定义用户名和密码登录的实现方法有三种:
第一种:配置文件的实现
第二种:继承WebSecurityConfigurerAdapter类,并且将BCryptPasswordEncoder对象交给Spring容器管理。
第三种:实现UserDetailsService接口,从数据库中查找用户名和密码
【注意事项】:三个方法只能选其一,不可以同时存在。

第一种实现方式:配置文件的实现

spring:
  security:
    user:
      name: "admin"
      password: "admin123"
      roles: "admin"

这样就是只能按照规定的用户名和密码登录了,再次启动SpringBoot项目时,SpringSecurity也不会自动帮助我们生成密码了。

第二种实现方式:继承WebSecurityConfigurerAdapter类,并且将BCryptPasswordEncoder对象交给Spring容器管理。

我们首先写一个配置类,并且使用@Configuration注解标记这个配置类,这样在启动SpringBoot的启动类时,Spring会自动将这个配置类交给Bean管理。继承WebSecurityConfigurerAdapter类,重写configure()方法。

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth.inMemoryAuthentication().withUser("admin")           // 用户名
                                    .password(passwordEncoder().encode("admin123"))   // 密码
                                    .authorities("admin");                 // 权限集合
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {

        return new BCryptPasswordEncoder();
    }
}


第三种:实现UserDetailsService接口,从数据库中查找用户名和密码

1、目前数据库中的数据表中有两条数据
SpringSecurity快速入门和自定义用户名、密码的实现_第3张图片
2、在pom文件中导入MyBatis-Plus(或者Mybatis)和数据库依赖

		
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-boot-starterartifactId>
            <version>3.5.1version>
        dependency>

        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>

3、创建实体类

import java.io.Serializable;

public class Users implements Serializable {

    private static final long serialVersionUID = -2950916241569716094L;
    
    private Integer id;

    private String username;

    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "Users{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

4、创建Mapper接口并且继承BaseMapper<实现类>接口,这样可以用MyBatis-Plus操作数据库了

@Mapper
public interface UserMapper extends BaseMapper<Users> {

}

5、创建自定义服务类实现UserDetailsService接口

【先到这里,下午继续写…】

你可能感兴趣的:(Spring,java,spring,boot,spring)