【知识库系统】使用SpringSecurity进行身份认证

一、理论知识部分

SpringSecurity 的官网文档地址:SpringSecurity

这里以24年3月份的 6.2.2 版本为例,记录一下学习过程。

1. SpringSecurity 是基于 Servlet Filters 的,而 Servlet Filters 中的流程如下:首先由客户端 Client 请求,请求后需要通过一个过滤链 FilterChain ,FilterChain 里面会有多个过滤器 Filter。

2. 我们可以自定义 Filter ,用来替代(Proxy) FilterChain 中的某个过滤节点,进而可以自定义一个过滤逻辑,这个逻辑就是 SpringSecurity 中的 SecurityFilterChain 

3. SecurityFilterChain 又可以定义多个 SecurityFilter 过滤条件

4. 用户使用账号密码登录时,会携带用户名 username 和密码 password 信息,然后会找到认证管理器 AuthenticationManager 中的一个抽象类 UserDetailsService ,它管理着用户的信息,是认证和授权的地方。重写 UserDetailsService ,可以对客户端传过来的数据 UsernamePasswordAuthenticationToken 和数据库中的 username、password 进行比对,并授予权限 role。

5. 获取到权限后,即可通过授权过滤器 AuthorizationFilter 进行授权判断,比如规定某些页面只能由 ADMIN 权限的账号查看,一些权限只需要被授权了即可查看,及时是 GUEST 游客权限。

二、代码实现部分

1. 在pom.xml中引入依赖

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

2. 配置过滤链 SecurityFilterChian

PasswordEncoder 定义了密码的加密方式

HttpSecurity 创建了认证的规则,如 /admin 页面只能让具有 ADMIN 权限的账号访问。另外也配置登录页面和登出页面。

@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic PasswordEncoder passwordEncoder(){return new BCryptPasswordEncoder();}@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests(authorize -> authorize.requestMatchers("/admin").hasRole("ADMIN").anyRequest().authenticated()).formLogin(login -> login.loginPage("/login").defaultSuccessUrl("/").permitAll()).logout(logout -> logout.logoutUrl("/logout").logoutSuccessUrl("/login").permitAll());return http.build();}
}

3. 重写认证方法

这里的 userMapper.findUserByUsername 需要自己去关联数据库,返回账号 username,加密的密码 password ,以及权限 role 即可。这里的 User 类不是自定义的,得是 SpringSecurity 中的 User 类。

@Service
public class UserDetailsServiceImpl implements UserDetailsService {@AutowiredUserMapper userMapper;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {UserEntity user = userMapper.findUserByUsername(username);return new User(user.getUsername(),new BCryptPasswordEncoder().encode(user.getPassword()), AuthorityUtils.createAuthorityList(user.getRole()));}
}

4. 补充好UserEntity、UserService、UserMapper 即可。自定义的页面用 Thymeleaf 编写或前后端分离都可以。

<dependency><groupId>org.thymeleaf.extras</groupId><artifactId>thymeleaf-extras-springsecurity6</artifactId>
</dependency>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间复杂度中的log(n)底数是多少?

问题&#xff1a; 最近有好几学生问我&#xff0c;无论是计算机算法概论、还是数据结构书中&#xff0c; 关于算法的时间复杂度很多都用包含O(logN)这样的描述&#xff0c;但是却没有明确说logN的底数究竟是多少。 解答&#xff1a; 算法中log级别的时间复杂度都是由于使用了分…

关于stm32(CubeMX+HAL库)的掉电检测以及flash读写

1.掉电检测 CubeMX配置 只需使能PVD中断即可 但是使能了PVD中断后还需要自行配置一些PWR寄存器中的参数&#xff0c;我也通过HAL库进行编写 void PVD_config(void) {//配置PWRPWR_PVDTypeDef sConfigPVD; sConfigPVD.PVDLevel PWR_PVDLEVEL_7; …

Python学习笔记1:Pycharm首次安装环境搭建汉化

Pycharm首次安装环境搭建汉化笔记 1.下载网址 首先下载专业版的pycharm&#xff0c;这里建议下载专业版是因为功能更全面&#xff0c;社区版的往往没有远程调控等实践功能。 网址贴在下方&#xff1a; https://www.jetbrains.com/pycharm/download/?sectionwindows •Profe…

解决gpt无法发送对话的问题

问题描述 如图&#xff0c;今天登上去发现怎么无法发送消息 解决 可能是cookie问题&#xff0c;重新删除了就行了 cookie删除后&#xff0c;需要重新登录&#xff0c;主题色也重置为原来的白色了

摄像机内存卡删除的视频如何恢复?恢复指南来袭

在现代社会&#xff0c;摄像机已成为记录生活、工作和学习的重要设备。然而&#xff0c;随着使用频率的增加&#xff0c;误删或意外丢失视频的情况也时有发生。面对这样的情况&#xff0c;许多用户可能会感到无助和困惑。那么&#xff0c;摄像机内存卡删除的视频真的无法恢复吗…

大语言模型系列-GPT-3.5(ChatGPT)

文章目录 前言一、GPT-3.5的创新点二、GPT-3.5的训练流程SFT数据集RM数据集PPO数据集 三、ChatGPT的诞生总结 前言 《Training language models to follow instructions with human feedback&#xff0c;2022》 前文提到了GPT-3的缺点&#xff0c;其中最大的问题是&#xff1…

KNN算法对鸢尾花进行分类:添加网格搜索和交叉验证

优化——添加网格搜索和交叉验证 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection imp…

Claude3发布,将取代ChatGPT4?

目录标题 前言Claude简介Claude 3 的能力高级推理视觉分析代码生成多语言处理 性能比较 前言 一夜之间&#xff0c;全球最强 AI 模型易主。大模型行业再次经历变革。OpenAI 最大的竞争对手 Anthropic 发布了新一代 AI 大模型系列 ——Claude 3。该系列包含三个模型&#xff0c…

【论文阅读】Natural Adversarial Examples 自然对抗的例子

文章目录 一、文章概览&#xff08;一&#xff09;摘要&#xff08;二&#xff09;导论&#xff08;三&#xff09;相关工作 二、IMAGENET-A 和 IMAGENET-O&#xff08;一&#xff09;数据集构造方式&#xff08;二&#xff09;数据收集过程 三、模型的故障模式四、实验&#x…

vscode ubuntu c++运行环境配置

官方教程地址&#xff1a;Get Started with C on Linux in Visual Studio Code&#xff08;Get Started with C on Linux in Visual Studio Code&#xff09; 1、下载安装vscode Visual Studio Code - Code Editing. Redefined&#xff08;Visual Studio Code - Code Editing…

气膜建筑是由什么材料制成的?PVDF膜材的革新应用值得期待吗?

随着科技的不断进步和发展&#xff0c;建筑行业也在不断涌现新型的建筑材料。气膜建筑作为其中一种创新的建筑膜材&#xff0c;在体育馆、运动场馆、展览厅等场所得到了广泛的应用。那么&#xff0c;究竟是什么材料构成了气膜建筑呢&#xff1f;轻空间小编将为您详细介绍。 气膜…

Win11系统启动VMware上虚拟机蓝屏解决办法

背景 最近有在做一个项目的过程中需要使用虚拟机&#xff0c;用原来装好的的Vmware14打开虚拟机&#xff0c;直接蓝屏了&#xff0c;尝试了如下几种方法来解决&#xff0c;最好用的就是第二种&#xff0c;直接下载最新版本(在软件管家中直接下载)。 虚拟机 目前常用的虚拟机软…

Docker 中 MySQL 的部署与管理

目录 一、Docker 中部署 MySQL1.1 部署 MySQL1.2 进入容器并创建数据库1.3 Navicat 可视化工具连接 二、可能存在的问题2.1 1130 - Host ‘172.17.0.1‘ is not allowed to connect to this MySQL server 参考资料 一、Docker 中部署 MySQL 1.1 部署 MySQL 首先&#xff0c;从…

[WiFi] 802.11w/802.11k/802.11v/802.11r/802.11u/802.11ai/802.11ah简介

802.11w&#xff08;PFM&#xff09; Protected Management Frames,802.11w协议主要基于现有的对数据报文的加密形式&#xff0c;对管理帧进行类似的加密。802.11w需要加密的管理帧包括解关联帧、去认证帧及强壮Action帧。 802.11k&#xff08;RRM&#xff09; Radio Resource …

一个简单的微信小程序表单提交样式模板

没什么东西&#xff0c;只是方便自己直接复制使用 .wxml <view class"box"><form bindsubmit"formSubmit"><view class"form-item"><text class"head">姓名&#xff1a;</text><input class"…

python数据类型 -- 集合Set

你好, 我是木木, 目前正在做两件事   1. 沉淀自己的专业知识   2. 探索了解各种副业项目&#xff0c;同时将探索过程进行分享&#xff0c;帮助自己以及更多朋友找到副业, 做好副业 文末有惊喜 在Python中&#xff0c;集合&#xff08;Set&#xff09;是一种无序、不重复元素的…

【Linux】Centos7上安装MySQL5.7

目录 1.下载安装包2. 上传安装包3.将 mysql 解压到/usr/local/4.重命名5.创建mysql用户及用户组6. 进入 mysql 目录修改权限7. 安装依赖库8. 执行安装脚本9. 复制启动脚本到资源目录10. 拷贝 my.cnf&#xff0c;并赋予权限11. 配置环境变量12. 启动 mysqld13. 登录 MySQL&#…

3.13练习题解

1.空调&#xff1a; 这道题目我们不妨直接考虑&#xff08;应该也很容易想到是差分&#xff0c;因为题目中给出的空调的功能已经有提示了&#xff09;&#xff0c;那么我们不妨对问题进行一下转化&#xff1a; 首先将当前温度和目标温度都确定下来&#xff0c;也就是&#xff…

1361:产生数(Produce)

【解题思路】 1、将数字拆分保存在数组中&#xff0c;而后转换每一位。 2、将数字变化规则保存在x、y两个一维数组中&#xff0c;x[i]到y[i]是一种转换规则。 3、从n的初始值开始搜索&#xff0c;对n做数字拆分&#xff0c;将拆分后的各位数字保存在一个数组中。针对数组中的每…

初识进程状态

&#x1f30e;进程状态【上】 文章目录&#xff1a; 进程状态 发现进程的状态 运行队列 进程排队 进程状态的表述       状态在代码中的表示       运行状态       阻塞状态       挂起状态 总结 前言&#xff1a; 为了搞明白正在运行的进程是什么意思…