当前位置: 首页 > 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…...

国内大学生常用的AI写作辅助平台有哪些?

国内高校学生常用的 AI 写作辅助平台&#xff0c;以本土化全流程工具为主&#xff0c;结合通用大模型与专项功能模块&#xff0c;覆盖选题构思、大纲搭建、初稿撰写、语言润色、降重处理、查重检测及格式排版等关键环节&#xff0c;以下是主流平台详解与对比&#xff1a; 一、本…...

接口测试用例设计:超详细防御体系与分层校验实践

1. 为什么“超详细”三个字在接口测试用例里不是修饰词&#xff0c;而是生死线我带过三支不同行业的测试团队——金融支付、SaaS中台、IoT设备管理平台。每次新人入职第一周&#xff0c;我都会收走他们写的前5条接口测试用例&#xff0c;逐行标红批注。不是因为格式不对&#x…...

基于PIC32单片机实现Android USB音频转SPDIF输出的DIY方案

1. 项目概述&#xff1a;为Android设备打造一个高保真SPDIF音频接口作为一名长期折腾嵌入式音频和家庭影院的玩家&#xff0c;我经常遇到一个痛点&#xff1a;手头那些性能不错的Android手机或平板&#xff0c;其内置的3.5mm耳机孔或者USB-C口的音频输出质量&#xff0c;在连接…...

【C++】零基础入门 · 第 5 节:函数基础

前面四节我们写的代码都集中在 main 函数里。随着程序变复杂,所有逻辑堆在一起会越来越难维护。函数就是用来解决这个问题的——它把一段代码「打包」起来,取个名字,需要的时候调用就行。 1. 为什么需要函数 假设你需要在程序的不同地方打印一行分隔线: cout << &…...

避坑指南:Unity动态加载模型时,TriLib插件材质丢失、缩放异常的5个常见问题解决

Unity动态加载模型避坑指南&#xff1a;TriLib插件材质丢失与缩放异常的深度解决方案当你在Unity项目中尝试使用TriLib插件动态加载外部模型时&#xff0c;是否遇到过这些令人抓狂的情况&#xff1a;模型加载后材质全部变成刺眼的粉红色&#xff0c;贴图神秘消失&#xff0c;或…...

5分钟免费搞定HS2汉化:Honey Select 2完整中文补丁终极教程

5分钟免费搞定HS2汉化&#xff1a;Honey Select 2完整中文补丁终极教程 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日文界面而烦恼吗…...

服务器数据下载安全:实时加密与动态访问控制实战

1. 这不是又一个“加个密码”的方案&#xff0c;而是服务器数据流动的实时安检闸机IP-guard安全网关——这个名字在企业IT运维圈里&#xff0c;常被误读为“桌面端U盘管控工具”或“员工上网行为审计系统”。但真正用过它来守服务器的人&#xff0c;会立刻意识到&#xff1a;它…...

D3KeyHelper终极指南:5分钟掌握暗黑3最强自动化工具

D3KeyHelper终极指南&#xff1a;5分钟掌握暗黑3最强自动化工具 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款专为《暗黑破坏神3…...

Charles弱网测试六维参数实战:从丢包率到DNS延迟的精准复现

1. 为什么弱网测试不能只靠“模拟3G”按钮点一下就完事做移动端或Web前端的同学&#xff0c;大概率都听过这句话&#xff1a;“上线前跑一遍Charles&#xff0c;切个2G网络测下加载。”——听起来很专业&#xff0c;实际一查日志&#xff0c;发现90%的团队连Charles的Throttlin…...

中兴新支点NewStartOS初体验:从激活到日常使用,聊聊这个国产Linux桌面的真实感受

中兴新支点NewStartOS深度体验&#xff1a;一个技术爱好者的真实使用笔记第一次启动中兴新支点NewStartOS时&#xff0c;那个简洁的登录界面就给我留下了不错的印象。作为一个长期在Windows和macOS之间切换的用户&#xff0c;这次尝试国产Linux桌面系统&#xff0c;更像是一次充…...