使用Spring Security如何实现将用户的数据存入数据库

  介绍

这篇文章运用简单易懂的例子给大家介绍使用Spring Security如何实现将用户的数据存入数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

<强> 1。UserDetailService

Spring Security支持多种不同的数据源,这些不同的数据源最终都将被封装成UserDetailsService的实例,在微人事(https://github.com/lenve/vhr)项目中,我们是自己来创建一个类实现UserDetailsService接口,除了自己封装,我们也可以使用系统默认提供的UserDetailsService实例,例如上篇文章和大家介绍的InMemoryUserDetailsManager。

我们来看下UserDetailsService都有哪些实现类:

使用Spring Security如何实现将用户的数据存入数据库

可以看的到,在几个能直接使用的实现类中,除了InMemoryUserDetailsManager之外,还有一个JdbcUserDetailsManager,使用JdbcUserDetailsManager可以让我们通过JDBC的方式将数据库和Spring Security连接起来。

<强> 2。JdbcUserDetailsManager

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

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

这里存储的脚本内容如下:

创建用户表(用户名varchar_ignorecase not null主键(50),密码varchar_ignorecase (500) not null,使布尔不是零);
  创建表当局(用户名varchar_ignorecase (50) not null,权威varchar_ignorecase (50) not null,约束fk_authorities_users外键(用户名)引用用户(用户名);
  创建唯一索引ix_auth_username> @ autowired
  数据源的数据源;
  @Override
  @ bean
  保护UserDetailsService UserDetailsService () {
  JdbcUserDetailsManager经理=new JdbcUserDetailsManager ();
  manager.setDataSource(数据源);
  如果(! manager.userExists (“javaboy")) {
  manager.createUser (User.withUsername (“javaboy") .password (“123“) .roles (“admin") .build ());
  }
  如果(! manager.userExists(“江南一点雨“)){
  manager.createUser (User.withUsername(“江南一点雨“).password (“123“) .roles (“user") .build ());
  }
  返回经理;
  }

这段配置的含义如下:

    <李>首先构建一个JdbcUserDetailsManager实例。 <李>给JdbcUserDetailsManager实例添加一个数据源对象。 <李>调用userExists方法判断用户是否存在,如果不存在,就创建一个新的用户出来(因为每次项目启动时这段代码都会执行,所以加一个判断,避免重复创建用户)。 <李>用户的创建方法和我们之前InMemoryUserDetailsManager中的创建方法基本一致。
      李,

这里的createUser或者userExists方法其实都是调用写好的SQL去判断的,我们从它的源码里就能看出来(部分):

公共类JdbcUserDetailsManager JdbcDaoImpl实现UserDetailsManager延伸,
  GroupManager {
  公共静态最终字符串DEF_USER_EXISTS_SQL=按佑没а≡裼没?用户名=,# 63;“;
  
  私人字符串userExistsSql=DEF_USER_EXISTS_SQL;
  
  公共布尔userExists(字符串的用户名){
  List用户=getJdbcTemplate () .queryForList (userExistsSql,
  新String [] {username}, String.class);
  
  如果(users.size()在1){
  把新的IncorrectResultSizeDataAccessException (
  “多> & lt; dependency>
  & lt; groupId> org.springframework.boot
  & lt; artifactId> spring-boot-starter-jdbc
  & lt;/dependency>
  & lt; dependency>
  & lt; groupId> mysql
  & lt; artifactId> mysql-connector-java
  & lt;/dependency> 

然后再在应用程序。属性中配置一下数据库连接:

spring.datasource.username=根
spring.datasource.password=123
spring.datasource.url=jdbc: mysql:///security& # 63; useUnicode=true& characterEncoding=UTF-8& serverTimezone=亚洲/上海

配置完成后,就可以启动项目。

项目启动成功后,我们就可以看到数据库中自动添加了两个用户进来,并且用户都配置了角色。如下图:

使用Spring Security如何实现将用户的数据存入数据库

使用Spring Security如何实现将用户的数据存入数据库

<强> 4。测试

接下来我们就可以进行测试了。

我们首先以江南一点雨的身份进行登录:

使用Spring Security如何实现将用户的数据存入数据库