当前位置: 首页 > article >正文

SpringBoot整合SpringSecurity、MyBatis-Plus综合实例:认证、授权

 Spring Security 安全框架,系列文章:

《SpringSecurity创建一个简单的自定义表单的认证应用》

《SpringSecurity中的过滤器链与自定义过滤器》

《SpringSecurity实现自定义用户认证方案》

《SpringSecurity密码编码器:使用BCrypt算法加密、自定义密码编码器》

《SpringSecurity基于配置方法控制访问权限:MVC匹配器、Ant匹配器》

《 SpringSecurity基于注解实现方法级别授权:@PreAuthorize、@PostAuthorize、@Secured》

《SpringSecurity处理器:登录成功处理器、登录失败处理器、无权限处理器、注销成功处理器》

《SpringSecurity获取当前登录用户信息》

《SpringBoot整合SpringSecurity、MyBatis-Plus综合实例:认证、授权》

1、Spring Security 框架的简介

Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架,它是 Spring 项目组中用来提供安全认证服务的框架,能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案。

Spring Security 的前身是 Acegi Security。它是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。Spring Security 采用了 AOP(面向切面编程)思想,并基于 Servlet 过滤器实现。

下面将介绍 Spring Boot 整合 Spring Security 、MyBatis-Plus 实现一个认证与授权应用,执行结果如下如:

(1)登录页面

(2)登录成功后,跳转至首页:

2、数据库准备

使用 MySQL 数据库,设计一个自定义的数据表结构,并添加数据。

-- 创建数据库
CREATE DATABASE IF NOT EXISTS db_admin; 
 
USE db_admin;
 
-- 创建自定义的用户信息表
DROP TABLE IF EXISTS user_info;
 
CREATE TABLE user_info(
    id BIGINT(20) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
    user_name VARCHAR(50) NOT NULL COMMENT '用户名称',
    PASSWORD VARCHAR(60) COMMENT '用户密码(使用BCrypt算法加密)',
    ENABLE TINYINT(4) NOT NULL DEFAULT 1 COMMENT '是否启用',
    permission VARCHAR(500) COMMENT '权限列表,多个权限之间用英文逗号分割',
    KEY key_username (user_name)
);
 
-- 插入数据1(密码明文:123456,已使用BCrypt算法加密)
INSERT INTO user_info(user_name,PASSWORD,ENABLE,permission) 
VALUES('admin','$2a$10$5N08Ve0QrdxiV7Y3i3zoOObZNcSjudadfrsLujxJ6HdrozrEWQGsW',
1,'USER:GET,USER:ADD,USER:UPDATE,USER:DELETE');

-- 插入数据2
INSERT INTO user_info(user_name,PASSWORD,ENABLE,permission) 
VALUES('panjunbiao','$2a$10$3pB4ng8aPtZcQbU7WjLB7.lnyH/za8Tx7BqdG71o/OoWHba.wVveK',
1,'USER:GET,USER:ADD');

-- 查询
SELECT * FROM user_info;

3、创建项目

【示例】Spring Boot 整合 Spring Security 、MyBatis-Plus 实现一个认证与授权应用。

3.1 创建 Spring Boot 项目

创建 Spring Boot 项目,项目结构如下图:

3.2 添加 Maven 依赖

在 pom.xml 配置文件中添加 Spring Security、MyBatis-Plus、JDBC、BCrypt 加密框架、Thymeleaf 模板引擎、Lombok 依赖。

<!-- Spring Boot 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

<!-- Spring Security 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <version>2.7.18</version>
</dependency>

<!-- Spring Security 内置的 BCrypt 加密框架 -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-crypto</artifactId>
    <version>6.4.2</version>
</dependency>

<!-- MyBatis-Plus 依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.7</version>
</dependency>

<!-- MySQL 的 JDBC 数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

<!-- Lombok 依赖 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

<!-- 引入Thymeleaf模板引擎 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

3.3 配置数据库连接参数

在项目的 application.yml 文件中,添加数据库连接的配置。

# 开发环境
server:
  port: 8085
  servlet:
    session:
      timeout: 30m
  tomcat:
    uri-encoding: UTF-8

# Spring配置
spring:
  application:
    name: SecurityManage
  #

http://www.kler.cn/a/564450.html

相关文章:

  • Cannot find a valid baseurl for repo: base/7/x86_64
  • 从零构建知识库:AI如何实现“问题即答案”?
  • 学习路程八 langchin核心组件 Models补充 I/O和 Redis Cache
  • 在android studio上使用rknn模块下面的yolov8_pose模型
  • 嘉孚朗SDP系列伺服螺丝刀使用介绍
  • C# 确保程序只有一个实例运行
  • shell脚本的相关练习--->分支结构---->循环结构
  • yolo11 training benchmark [i7-13700 vs nvidia 3090]
  • Staruml软件的介绍安装uml类图的绘制流程
  • 第8章:流式海啸:数据重构
  • 8、HTTP/1.0和HTTP/1.1的区别【高频】
  • information_schema.processlist 表详解
  • Stale file handle
  • TCP 缓冲区核心机制
  • 为什么要进行软件测试?
  • 前端或者后端通常用到数组使用方式
  • 华为对流程认知的三个层次(重新认识流程)
  • 执行git操作时报错:`remote: [session-b8xxxda3] Access denied ...`解决方案
  • 深度分析:AheadComputing的RISC-V技术背景、战略定位与挑战
  • VScode在windows10上使用clang-format