这篇文章运用简单易懂的例子给大家介绍使用Spring Security如何实现将用户的数据存入数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
<强> 1。UserDetailService 强>
Spring Security支持多种不同的数据源,这些不同的数据源最终都将被封装成UserDetailsService的实例,在微人事(https://github.com/lenve/vhr)项目中,我们是自己来创建一个类实现UserDetailsService接口,除了自己封装,我们也可以使用系统默认提供的UserDetailsService实例,例如上篇文章和大家介绍的InMemoryUserDetailsManager。
我们来看下UserDetailsService都有哪些实现类:
可以看的到,在几个能直接使用的实现类中,除了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=亚洲/上海配置完成后,就可以启动项目。
项目启动成功后,我们就可以看到数据库中自动添加了两个用户进来,并且用户都配置了角色。如下图:
<强> 4。测试强>
接下来我们就可以进行测试了。
我们首先以江南一点雨的身份进行登录:
使用Spring Security如何实现将用户的数据存入数据库