上篇文章我们介绍了SpringSecurity系统认证的流程,我们发现系统认证其实是通过一个UserDetailService的实现类来实现的,所以我们就可以使用相同的方式将认证的业务改成和数据库的对比。此案例持久层我们通过Mybatis来实现

一、mybatis准备

1.导入相关依赖

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.3</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.3</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.43</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version>
</dependency>

2.配置文件

db.properties

#mysql\u6570\u636E\u5E93\u8FDE\u63A5
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/srm?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

Mybatis的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration></configuration>

和spring的整合文件

<!-- 配置数据库连接池 -->
<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"destroy-method="close"><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="driverClassName" value="${jdbc.driver}" /><property name="maxActive" value="10" /><property name="minIdle" value="5" />
</bean>
<!-- SqlSessionFactory -->
<!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 数据库连接池 --><property name="dataSource" ref="dataSource" /><!-- 加载mybatis的全局配置文件 --><property name="configLocation" value="classpath:mybatis-config.xml" /><!--映射文件和接口文件不在同一个目录下的时候它的spring是不会去扫描jar包中的相应目录的,只会去他当前项目下获取。其实要改变这种情况很简单,在classpath后面加一个*号,*号的作用是让spring的扫描涉及全个目录包括jar--><property name="mapperLocations" value="classpath*:mapper/*.xml"/>
</bean>
<!-- Mapper映射文件的包扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.dpb.security.dao" />
</bean>

3.pojo文件

package com.dpb.security;/*** @program: springboot-52-security* @description: 用户* @author: 波波烤鸭* @create: 2019-12-01 22:26*/
public class UserPojo{private Integer  id;private String username;private String password;private String salt;private String nickname;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;}public String getSalt() {return salt;}public void setSalt(String salt) {this.salt = salt;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}
}

4.dao接口

定义一个根据账号查询的方法即可

5.映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dpb.security.dao.UserDao"><select id="queryByUserName"  resultType="com.dpb.security.pojo.UserPojo">select * from t_user where username = #{userName}</select>
</mapper>

6.service

接口定义

接口实现

二、service修改

接下来我们看看如何将SpringSecurity引入进来

1.UserService 继承 UserDetailService接口

2.重写loadUserByusername方法

    /*** 根据账号查询* @param s 登录表单输入的账号* @return* @throws UsernameNotFoundException*/@Overridepublic UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {// 根据账号去数据库中查询UserPojo userPojo = this.queryByUserName(s);if(userPojo != null){List<SimpleGrantedAuthority> authorities = new ArrayList<>();// 设置登录账号的角色authorities.add(new SimpleGrantedAuthority("ROLE_USER"));UserDetails user = new User(userPojo.getUsername(),"{noop}"+userPojo.getPassword(),authorities);return user;}// 返回null 默认表示账号不存在return null;}
}

三、配置文件修改

  既然使用自定义的认证方法,那么原来设置的内存中的账号就不需要了

四、登录测试

启动系统,登录测试即可

搞定~

五、加密处理

  显然在实际项目中,对密码加密是必须的,所以我们就来看看SpringSecurity中是怎么做加密的。我们在此处通过BCryptPasswordEncoder来加密,动态加盐的方式


配置文件中设置加密规则

去掉{noop}

修改数据库中对应的密码

六、认证状态判断

  我们在实际项目中因为用户的不同操作,可能会给出不同的状态,比如正常,冻结等,SpringSecurity也支持,我们来看下,如何实现。

然后我们在认证的时候使用User对象的另一个构造器就可以了

参数 说明
boolean enabled 是否可用
boolean accountNonExpired 账号是否失效
boolean credentialsNonExpired 秘钥是否失效
boolean accountNonLocked 账号是否锁定

如此设置即可

然后状态(status)为0的记录就没法正常登陆咯~

SpringSecurity实现数据库认证相关推荐

  1. SpringSecurity系列之基于数据库认证

    SpringSecurity系列之基于数据库认证 本文中所使用的技术栈如下: SpringBoot 2.6.2 MyBatis Plus 3.5.0 SpringSecurity 5.6.1 一.创建 ...

  2. 若依管理系统——前后端分离版(二)登陆接口分析及SpringSecurity的登陆认证流程

    一.登陆流程分析 0. 流程整理 1. 图片验证码接口/captchaImage 2.登陆验证接口/login 2.1 校验图片验证码 2.1 查询用户信息 2.3查询用户的权限信息 2.4 生成令牌 ...

  3. 【SpringSecurity系列02】SpringSecurity 表单认证逻辑源码解读

    概要 前面一节,通过简单配置即可实现SpringSecurity表单认证功能,而今天这一节将通过阅读源码的形式来学习SpringSecurity是如何实现这些功能, 前方高能预警,本篇分析源码篇幅较长 ...

  4. SpringBoot+SpringSecurity+JWT实现认证和授权

    SprinBoot 系列文章: Spring Boot入门之Hello Spring Boot SpringBoot 配置多个JdbcTemplate SpringBoot 整合Mybatis CAS ...

  5. OCP-Oracle 12c 数据库认证

    OCP-Oracle 12c 数据库认证 一.Oracle数据库认证专家 OCP(Oracle Certified Professional)是Oracle公司的Oracle数据库DBA认证课程,通

  6. SpringSecurity使用自定义认证页面

    SpringSecurity使用自定义认证页面 在SpringSecurity主配置文件中指定认证页面配置信息 修改认证页面的请求地址 再次启动项目后就可以看到自定义的酷炫认证页面了!

  7. Spring Security基于数据库认证用户登录

    Spring Security为我们提供了默认的登录页面,通过重写以AuthenticationManagerBuilder为参数的configure方法,我们可基于各种数据存储来认证用户,比如内存. ...

  8. guacamole开发者文档——数据库认证

    Guacamole支持通过MySQL或PostgreSQL数据库通过项目网站提供的扩展进行身份验证.使用数据库进行身份验证提供了其他功能,与默认的,由XML驱动的认证模块不同,对用户和连接的所有更改都 ...

  9. CAS单点登录-配置数据库认证方式

    接下来,说一下配置数据库认证单点登录 如果你之前的单点登录搭成功了,之后就简单多了,只需要添加一些配置和jar包即可.若未成功,请参考CAS单点登录入门配置 步骤: 1.引入相关jar包 2.创建数据 ...

最新文章

  1. 浅谈MySQL中utf8和utf8mb4的区别
  2. 数学图形(2.19) 利萨茹3D曲线
  3. L2-004 这是二叉搜索树吗?-团体程序设计天梯赛GPLT
  4. Python元组与列表
  5. android stuido 在线安装svn插件,添加版本库无响应
  6. Java黑皮书课后题第8章:*8.3(按考分对学生排序)重写程序清单8-2,按照正确答案个数的升序显示学生
  7. linux 内核编译需要多大空间,编译2.6.28内核出错。。。。空间不足。而/tmp/还有好几G...
  8. Maven 打包过滤掉jar包、class文件和指定jsp文件
  9. Devpress.XtraGrid.GridControl.GridView属性
  10. 2020博客之星年度总评选 - 显示排名
  11. your cuda software stack is old.we fall back to the NIVIDIA driver for some compilation. Update your
  12. opta planner_使用Excel Christmas Planner进行整理
  13. Android StepsView 步骤控件
  14. vue项目-android版本引入微信录音
  15. 基于python的opencv相机标定(采用黑白棋盘格标定板)
  16. java算法之因式分解
  17. blender script mmd_tool 自动重命名刚体到合适的名字
  18. CMOS 和CCD的区别
  19. ubuntu里的桌面便签工具
  20. 多仓库移动机器人时空约束分层调度策略

热门文章

  1. java 查看堆内存_查看java内存情况的几个常用命令
  2. glove.840B.300d、glove.42B.300d、glove.6B网盘下载
  3. ipfs 存储目录结构
  4. 深度学习中降维和升维
  5. python 抓取头条街拍图片
  6. google gcr.io、k8s.gcr.io 国内镜像
  7. Mac电脑蓝牙连接出问题了,如何重置Mac的蓝牙模块
  8. 有关MAC、PHY和MII
  9. 微信Windows版无法备份聊天记录
  10. grub4dos 启动ubuntu 12.04