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

Spring Security 6如何使用?

Spring Security 6 是一个功能强大且高度可定制的身份验证和访问控制框架,它专注于为基于Java的应用程序提供全面的安全解决方案。以下是对Spring Security 6的详细解析:

一、核心功能

身份验证(Authentication):

验证用户的身份是否合法。Spring Security提供了多种身份验证机制,如用户名密码登录、HTTP基本身份验证、OAuth2等。
当用户提供凭据(如用户名和密码)时,AuthenticationManager负责处理身份验证逻辑,并创建一个包含用户信息的Authentication对象。

授权(Authorization):

确定用户具有哪些权限,以便控制用户可以访问的资源。
AccessDecisionManager负责处理授权逻辑,根据用户的角色和权限来决定是否允许用户访问特定资源。它使用投票策略来决定是否允许访问,如果赞成票多于反对票,则允许访问。

防止跨站请求伪造(CSRF):

跨站请求伪造是一种攻击方式,攻击者试图利用已登录用户的凭据来执行恶意操作。
Spring Security通过CsrfFilter来防止这种攻击,它会自动为每个表单添加一个隐藏的CSRF令牌,并在表单提交时验证令牌的有效性。


二、使用步骤

使用Spring Security 6主要涉及以下几个步骤:

1. 引入依赖

首先,你需要在你的项目中引入Spring Security 6的依赖。这通常是通过在你的Maven pom.xml 文件或Gradle build.gradle 文件中添加相应的依赖来实现的。以Maven为例,你可以添加如下依赖:

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-security</artifactId>

    <version>你的Spring Boot版本对应的Spring Security版本</version>

</dependency>

请注意,你需要根据你的Spring Boot版本选择合适的Spring Security版本。

2. 配置Spring Security

在Spring Boot项目中,你可以通过application.properties或application.yml文件来添加Spring Security的相关配置,如自定义登录页面、注销行为、记住我功能等。然而,对于更复杂的配置,你通常需要创建一个配置类来重写Spring Security的默认行为。

由于Spring Security 6中WebSecurityConfigurerAdapter类已经过时,你现在需要将需要重写的方法定义为Bean。以下是一个简单的配置示例:

@Configuration

@EnableWebSecurity

public class SecurityConfig {

 

    @Bean

    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {

        http

            .authorizeRequests(authorizeRequests ->

                authorizeRequests

                    .antMatchers("/public/**").permitAll() // 公开访问的URL

                    .anyRequest().authenticated() // 其他所有请求都需要认证

            )

            .formLogin(form ->

                form

                    .loginPage("/login") // 自定义登录页面

                    .permitAll()

            )

            .logout(logout ->

                logout

                    .permitAll()

            );

        return http.build();

    }

 

    @Bean

    public PasswordEncoder passwordEncoder() {

        return new BCryptPasswordEncoder();

    }

    // 其他配置...

}

3. 自定义用户认证

Spring Security通过UserDetailsService接口来加载用户信息。你可以实现这个接口来从数据库或其他存储中查询用户信息。

@Service

public class CustomUserDetailsService implements UserDetailsService {

    @Autowired

    private UserRepository userRepository; // 假设你有一个UserRepository来访问数据库

    @Override

    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        User user = userRepository.findByUsername(username);

        if (user == null) {

            throw new UsernameNotFoundException("User not found with username: " + username);

        }

        // 根据你的业务逻辑构建UserDetails对象

        return new org.springframework.security.core.userdetails.User(

            user.getUsername(),

            user.getPassword(), // 注意:这里的密码应该是加密后的

            user.getAuthorities() // 假设User类有一个getAuthorities()方法来获取用户的权限

        );

    }

}

4. 整合数据库

如果你打算从数据库中读取用户信息,你需要配置数据源并创建相应的Repository或DAO来访问数据库。这通常涉及到JPA、MyBatis或Spring Data等技术的使用。

5. 测试与调试

配置完Spring Security后,你需要启动你的应用程序并进行测试,以确保安全配置按预期工作。你可以尝试使用不同的用户角色和权限来访问受保护的资源,并检查是否得到了正确的响应。

6. 注意事项

确保你的Spring Boot版本与Spring Security版本兼容。

在生产环境中,不要使用硬编码的密码或内存中的用户存储。

启用HTTPS来保护你的应用程序免受中间人攻击。

考虑使用更复杂的密码策略,如密码长度、复杂度要求等。

定期审查和更新你的安全配置,以应对新的安全威胁。

相关文章:

Spring Security 6如何使用?

Spring Security 6 是一个功能强大且高度可定制的身份验证和访问控制框架&#xff0c;它专注于为基于Java的应用程序提供全面的安全解决方案。以下是对Spring Security 6的详细解析&#xff1a; 一、核心功能 身份验证&#xff08;Authentication&#xff09;&#xff1a; 验…...

PyTorch深度学习快速入门教程--学习笔记

目录 P4 PyCharm和Jupyter的对比 P5 PyTorch加载数据 P6 Dataset类代码实现 P7 Tensorboard 写日志 读取日志文件 Tensorboard 读图片 P10 Transforms使用 Transforms用途 常见的Transforms工具 P14 torchvision数据集使用 P15 Dataloader使用 P16 nn.Module模块使…...

SQLALchemy 分组过滤、子查询

SQLALchemy 分组过滤、子查询 分组和过滤(Group By Having)示例:使用ORM示例:使用SQLAlchemy Core子查询(Subquery)SQLAlchemy 是一个流行的 SQL 工具包和对象关系映射(ORM)库,用于 Python 应用程序。它允许你以 Pythonic 的方式使用 SQL 数据库,同时提供了强大的查询…...

华为od(D卷) 环中最长子串/字符成环找偶数LOX

文章目录 题目描述输入描述输出描述示例1示例2示例3思路代码 题目描述 给你一个字符串 s&#xff0c;字符串 s 首尾相连成一个环形&#xff0c;请你在环中找出 ‘l’、‘o’、‘x’ 字符都恰好出现了偶数次最长子字符串的长度。 输入描述 输入是一串小写的字母组成的字符串 …...

机器学习--常见算法总结

有监督学习算法 1. 线性回归算法 概念&#xff1a;线性回归是一种统计方法&#xff0c;用于预测一个变量&#xff08;因变量&#xff09;与一个或多个自变量&#xff08;特征变量&#xff09;之间的关系。目标是通过线性方程建立自变量和因变量之间的关系模型。 作用&#x…...

QT 网络聊天室简易版

视频:qt开发网络聊天w室软件3.4界面开发_哔哩哔哩_bilibili 目录 UI部分 设计稿图 放置控件 界面美化 拖动窗体 设置界面 网络部分 配置对话框 多项目结果和服务器端设计 客户端框架开发 UI部分 设计稿图 放置控件 界面美化 现在我们把窗体自带的标题栏给去了,用我们自…...

Linux_Shell三剑客grep,awk,sed-08

三剑客的概述&#xff1a; awk、grep、sed是linux操作文本的三大利器&#xff0c;合称文本三剑客&#xff0c;也是必须掌握的linux命令之一。三者的功能都是处理文本&#xff0c;但侧重点各不相同&#xff0c;其中属awk功能最强大&#xff0c;但也最复杂。grep更适合单纯的查找…...

uniapp实现足球数据分析平台移动端H5

文章目录 前言一直想做一款足球分析平台&#xff0c;大概内容包括竞彩分析模块&#xff0c;即时预测模块&#xff0c;初盘分析模块&#xff0c;找来找去还是前端铺子的样式感觉比较好看。 一、界面一栏二、注册界面1.代码说明 三、首页界面四、竞彩预测五、即时预测总结 前言 …...

Redis5优化-Redis

1、Redis关键参数 a、客户端最大连接数 maxclients 60000 注意该参数受到操作系统最大文件句柄的限制(ulimit -n) b、响应 repl-ping-slave-period/repl-timeout repl-timeout 60 1&#xff09;、说明&#xff1a;slave 会每隔 repl-ping-slave-period(默认10秒)ping一次mast…...

Element UI【详解】el-scrollbar 滚动条组件

el-scrollbar 滚动条组件用于优化页内滚动条的UI效果&#xff0c;使用时必须指定高度&#xff01; /*el-scrollbar 必须指定高度*/ .scrollMenuBox {height: 200px;width: 100px;border: 1px solid red; } 控制el-scrollbar内滚动条的方法与控制页面的滚动条的方法基本一样&a…...

【精选】基于Python大型购物商城系统(京东购物商城,淘宝购物商城,拼多多购物商城爬虫系统)

目录&#xff1a; 目录&#xff1a; 系统介绍&#xff1a; 系统开发技术 Python语言 Django框架简介 MySQL数据库技术 B/S架构 系统设计 系统总体设计 系统详细界面实现&#xff1a; 系统测试 测试目的 测试用例 本章小结 参考代码&#xff1a; 为什么选择我&…...

QT翻金币小游戏(含音频图片文件资源)

目录 QT翻金币小游戏 音频图片资源文件获取 效果展示 图片 视频 实现代码 main.cpp mymainwindow.h mymainwindow.cpp startscene.h startscene.cpp selectscene.cpp playscene.h playscene.cpp mypushbutton.h mypushbutton.cpp dataconfig.h dataconfig.cpp QT…...

Linux配置JDK8环境变量

目录 一、yum安装1.1 OpenJDK安装1.2 测试是否能够使用1.3 如何卸载JDK 二、手动安装2.1 下载2.2 上传到linux服务器路径2.3 解压2.4 配置环境变量2.5 测试是否能够使用 一、yum安装 1.1 OpenJDK安装 sudo yum install -y java-1.8.0-openjdk-devel1.2 测试是否能够使用 jav…...

Fiddle抓手机app的包

前言 本次文章讲述的是&#xff0c;fiddle获取手机代理&#xff0c;从而获取手机app的http、https请求&#xff01; 一.下载安装汉化Fiddle 1.点击Fiddler官网下载链接&#xff1a;Download Fiddler Web Debugging Tool for Free by Telerik 2.直接运行&#xff0c;选择自己需…...

Oracle+ASM+High冗余详解及空间计算

Oracle ASM&#xff08;Automatic Storage Management&#xff09;的High冗余模式是一种提供高度数据保护的策略&#xff0c;它通过创建多个数据副本来确保数据的可用性和安全性。 以下是关于Oracle ASM High冗余的详细解释&#xff1a; 一、High冗余的特点 1.数据冗余度 在Hi…...

如何为 Nextcloud 配置自动数据库备份 - 应用程序

自动数据库备份模块简化了生成数据库计划备份的过程。这些备份可以存储在各种位置&#xff0c;包括本地驱动器、FTP 服务器、SFTP 服务器、Dropbox、Google Drive、OneDrive、NextCloud 和 Amazon S3 云存储。用户还可以选择启用自动删除过期备份的功能。此外&#xff0c;用户可…...

child_process.spawn简介

child_process.spawn 是 Node.js 中 child_process 模块的一个重要方法&#xff0c;它用于异步地创建子进程来执行指定的命令。下面是对 child_process.spawn 的深入解析&#xff1a; 一、基本用法 spawn 方法的基本语法如下&#xff1a; const { spawn } require(child_pr…...

整理给测试人看的千页面试题

人往高处走水往低处流&#xff0c;九月已来&#xff0c;“金九银十”招聘季还会远吗&#xff1f; 转眼2024年招聘季就要来了&#xff0c;没点真本事真技术&#xff0c;没点面试经验&#xff0c;不了解点职场套路&#xff0c;如何过五关斩六将&#xff1f;如何打败面试官&#…...

Linux 内核中的并发与竞争

1. 引入并发与竞争的概念 在现代计算环境中&#xff0c;多个任务和线程通常会同时执行&#xff0c;因此理解并发和竞争的特性与挑战至关重要。以下是对这两个概念的详细介绍。 1. 并发&#xff08;Concurrency&#xff09; 定义&#xff1a; 并发是指多个任务在同一时间段内…...

Ubuntu修改命令提示符格式PS1

命令提示符组成 通过Xshell进入Ubuntu的默认提示符是这样的 rootDESKTOP:~# root: 当前登录用户DESKTOP&#xff1a;主机名~: 当前目录名&#xff08;即用户主目录&#xff09;#&#xff1a;超级用户权限(root用户显示)$: 普通用户权限(非root用户显示) 修改命令提示符 step1…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

从零开始了解数据采集(二十八)——制造业数字孪生

近年来&#xff0c;我国的工业领域正经历一场前所未有的数字化变革&#xff0c;从“双碳目标”到工业互联网平台的推广&#xff0c;国家政策和市场需求共同推动了制造业的升级。在这场变革中&#xff0c;数字孪生技术成为备受关注的关键工具&#xff0c;它不仅让企业“看见”设…...