3.springsecurity——将用户数据存入数据库

Posted 结构化思维wz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.springsecurity——将用户数据存入数据库相关的知识,希望对你有一定的参考价值。

3.springsecurity——将用户数据存入数据库


真正的项目中,大部分情况下,我们都是自己设计权限数据库,不过,Spring Security 也给我们提供了一个它自己设计好的权限数据库,这里我们先来看看这是怎么回事!先来学这个简单的,然后我们再去看复杂的。

1.UserDetailService

Spring Security 支持多种不同的数据源,这些不同的数据源最终都将被封装成 UserDetailsService 的实例,我们可以自己来创建一个类实现 UserDetailsService 接口,除了自己封装,我们也可以使用系统默认提供的 UserDetailsService 实例,例如上篇文章和大家介绍的 InMemoryUserDetailsManager 。

在这里插入图片描述

上篇文章中,我们使用了 InMemoryUserDetailsManager 来定义内存中的数据源;这次我们使用JdbcUserDetailsManager 可以让我们通过 JDBC 的方式将数据库和 Spring Security 连接起来。

2.JdbcUserDetailsManager

2.1 数据库

JdbcUserDetailsManager 自己提供了一个数据库模型,这个数据库模型保存在如下位置:

org/springframework/security/core/userdetails/jdbc/users.ddl

存储的脚本:

create table users(username varchar_ignorecase(50) not null primary key,password varchar_ignorecase(500) not null,enabled boolean not null);
create table authorities (username varchar_ignorecase(50) not null,authority varchar_ignorecase(50) not null,constraint fk_authorities_users foreign key(username) references users(username));
create unique index ix_auth_username on authorities (username,authority);

可以看到,脚本中有一种数据类型 varchar_ignorecase,这个其实是针对 HSQLDB 数据库创建的,而我们使用的 mysql 并不支持这种数据类型,所以这里需要大家手动调整一下数据类型,将 varchar_ignorecase 改为 varchar 即可。

修改完成后,创建数据库,执行完成后的脚本。

执行完 SQL 脚本后,我们可以看到一共创建了两张表:users 和 authorities。

  • users 表中保存用户的基本信息,包括用户名、用户密码以及账户是否可用。
  • authorities 中保存了用户的角色。
  • authorities 和 users 通过 username 关联起来。

在这里插入图片描述

2.2 配置

  @Autowired
    DataSource dataSource;
    @Override
    @Bean
    protected UserDetailsService userDetailsService() {
        JdbcUserDetailsManager manager = new JdbcUserDetailsManager();
        manager.setDataSource(dataSource);
        if (!manager.userExists("javaboy")) {
            manager.createUser(User.withUsername("zhangsan").password("123").roles("admin").build());
        }
        if (!manager.userExists("张三")) {
            manager.createUser(User.withUsername("张三").password("123").roles("user").build());
        }
        return manager;
    }
#数据库
spring.datasource.url=jdbc:mysql://localhost:3306/security?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456

2.3 依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

2.4 运行

在这里插入图片描述

接下来就可以用张三来测试登录了!!!

以上是关于3.springsecurity——将用户数据存入数据库的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security---将用户数据存入数据库详解

如何将存入数据库的乱码还原?

图片如何存入数据库

Grails 3.3.9 spring security 3.2.3 spring security ui 3.1.2 无法更改用户数据

Linux入门之磁盘管理磁盘配额

C#如何存入数据至数据库