Spring Boot 中使用 Spring Security 实现安全访问权限管理:详尽指南

引言:

在现代Web应用开发中,安全是一个至关重要的环节。Spring Security 是一个功能强大且高度可定制的安全框架,能够为Spring Boot应用提供全面的安全解决方案,包括认证(Authentication)和授权(Authorization)。本文将手把手教你如何在Spring Boot应用中集成Spring Security,实现用户登录验证、角色权限控制等安全访问权限操作。

一、引入Spring Security依赖

首先,确保你的Spring Boot项目中包含了Spring Security依赖。在pom.xml文件中加入以下依赖:

 

Xml

1<dependency>
2    <groupId>org.springframework.boot</groupId>
3    <artifactId>spring-boot-starter-security</artifactId>
4</dependency>

二、基本配置

2.1 自动配置

Spring Boot自动配置Spring Security,一旦添加了上述依赖,应用就具备了基本的安全功能,比如对所有端点的默认登录页面和身份验证要求。

2.2 自定义配置

为了更细致地控制安全策略,我们可以创建一个配置类,扩展WebSecurityConfigurerAdapter

 

Java

1@Configuration
2@EnableWebSecurity
3public class SecurityConfig extends WebSecurityConfigurerAdapter {
4
5    @Autowired
6    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
7        auth
8            .inMemoryAuthentication()
9            .withUser("user").password(passwordEncoder().encode("password")).roles("USER")
10            .and()
11            .withUser("admin").password(passwordEncoder().encode("adminpass")).roles("USER", "ADMIN");
12    }
13
14    @Bean
15    public PasswordEncoder passwordEncoder() {
16        return new BCryptPasswordEncoder();
17    }
18
19    @Override
20    protected void configure(HttpSecurity http) throws Exception {
21        http.authorizeRequests()
22            .antMatchers("/").permitAll()
23            .antMatchers("/admin/**").hasRole("ADMIN")
24            .anyRequest().authenticated()
25            .and()
26            .formLogin().permitAll()
27            .and()
28            .logout().permitAll();
29    }
30}

三、认证(Authentication)

认证是指确认用户身份的过程。上述配置中,我们通过inMemoryAuthentication配置了两个用户,分别拥有"USER"和"ADMIN"角色,并使用BCryptPasswordEncoder加密了密码。

四、授权(Authorization)

授权是决定已认证用户可以访问哪些资源的过程。在configure(HttpSecurity http)方法中,我们使用了.antMatchers()来定义访问规则:

  • / 对所有人开放。
  • /admin/** 只允许具有"ADMIN"角色的用户访问。
  • 其他所有请求需要认证。

五、登录与登出

  • formLogin().permitAll() 开启基于表单的登录功能,并允许所有人访问登录页面。
  • logout().permitAll() 允许所有人访问登出功能。

六、自定义登录页面

如果你希望使用自定义的登录页面,可以通过以下配置:

 

Java

1http.formLogin()
2    .loginPage("/custom-login") // 自定义登录页面URL
3    .loginProcessingUrl("/login") // 处理登录请求的URL
4    .defaultSuccessUrl("/") // 登录成功后的跳转URL
5    .permitAll();

并创建对应的custom-login.html页面。

七、总结

通过以上步骤,我们已经成功在Spring Boot应用中集成了Spring Security,实现了基本的用户认证和权限控制。Spring Security的强大之处在于其高度的可定制性,你可以根据需要扩展用户认证逻辑、集成OAuth2、JWT令牌等,以满足不同应用场景的安全需求。希望这篇指南能够为你提供一个良好的起点,开启你的安全开发之旅。

感谢你的点赞!关注!收藏

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DSPy:变革式大模型应用开发

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径&#xff1a;AI代理工作流大模型应用开发实用开源项目汇总大模…

DX-11A信号继电器 0.5A 柜内板前接线 约瑟JOSEF

DX-11,11A,11B,11C型信号继电器 DX-11信号继电器 DX-11B信号继电器 DX-11A信号继电器 DX-11C信号继电器 1 用途 该继电器用于直流操作的保护线路中&#xff0c;作为信号指示器。 2 结构和原理 该继电器具有电磁铁和带公共点的三付动合触点及一个信号牌&#xff0c;为电…

【哈尔滨等保测评标准解析】

哈尔滨信息安全等级保护测评&#xff08;等保测评&#xff09;标准解析如下&#xff1a; 一、总体概述 哈尔滨市在进行等保测评时&#xff0c;遵循国家统一的标准框架&#xff0c;并结合本省的实际情况&#xff0c;形成了具有地方特色的安全防护模式。等保测评的主要目的是确…

笔记101:OSQP求解器的底层算法 -- ADMM算法

前言1&#xff1a;这篇博客仅限于介绍拉格朗日乘子法&#xff0c;KKT条件&#xff0c;ALM算法&#xff0c;ADMM算法等最优化方法的使用以及简版代码实现&#xff0c;但不会涉及具体的数学推导&#xff1b;不过在下面我会给出具体数学推导的相关文章和截图&#xff0c;供学有余力…

数据结构_1.0

一、数据结构概述 1.1 概念 在计算机科学中&#xff0c;数据结构是一种数据组织、管理和存储的格式 。它是相互之间存在一种或多种特定关系的数据元素的集合。通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技…

PCB中的4种接地方式

“地”是电子技术中一个很重要的概念。由于“地”的分类与作用有多种&#xff0c; 容易混淆。 电路板的GROUND&#xff08;简称GND&#xff09;&#xff0c;即电路设计中所说的“地”&#xff0c;严格来说&#xff0c;只有大地才是真正的“地”&#xff0c;电路板中的GND只是电…

ERP系统中有哪些模块?有哪些具体实现方案呢?

对于许多初次接触ERP系统的企业来说&#xff0c;可能会对系统中包含的模块和功能感到困惑。本文将详细介绍ERP系统中的主要模块&#xff0c;需要明确的是&#xff0c;ERP系统是一个庞大的系统&#xff0c;包含了多个模块&#xff0c;每个模块都有其独特的功能和作用。这些模块涵…

让新质生产力照进现实,智慧数据基础设施需要软硬兼施

数智化时代&#xff0c;什么才是企业与组织最大的差异化竞争力&#xff1f; 答案无疑是&#xff1a;数据。在生成式AI技术日新月异之际&#xff0c;发展新质生产力已成为产业共识&#xff0c;越来越多的企业意识到&#xff1a;数据乃一切运作的基础&#xff0c;是企业拥抱AI浪…

列出每个字符的位置

列出每个字符的位置 一行字母&#xff0c;部分连续。 ABCDEFGHIJ1puuuupppup 需要整理成字母位置的形式。 ABCDE1p1u2345p678u9p10 使用 SPL XLL spl("[(dE1(?)).groupop(~).(d(~1) / ~.concat())]",A1:J1)函数 E1 将多层序列转为单层&#xff0c;groupop分组后…

【前端环境1】安装nvm

【前端环境1】安装nvm 写在最前面一、卸载node二、下载nvm三、安装教程四、验证nvm安装五、nvm配置node常用命令 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#…

接口测试流程及测试点!

一、什么时候开展接口测试 1.项目处于开发阶段&#xff0c;前后端联调接口是否请求的通&#xff1f;&#xff08;对应数据库增删改查&#xff09;--开发自测 2.有接口需求文档&#xff0c;开发已完成联调&#xff08;可以转测&#xff09;&#xff0c;功能测试展开之前 3.专…

“私域流量:解锁电商新机遇,共创数字化未来“

一、私域流量的战略意义再探 步入数字化浪潮的深处&#xff0c;流量已成为企业成长不可或缺的血液。与广泛但难以掌控的公域流量相比&#xff0c;私域流量以其独特的专属性和复用潜力&#xff0c;为企业铺设了通往深度用户关系的桥梁。它不仅赋能企业实现精准营销&#xff0c;…

MySQL-核心知识要点

1、索引的数据结构-Btree BTree的优势&#xff1a; B树的内节点无data&#xff0c;一个节点可以存储更多的K-V对。在构造树时&#xff0c;需要的内节点会更少&#xff0c;那么树的层级也会越低。查询一条数据时&#xff0c;1. 扫描的层级低&#xff0c;扫描过的节点更少&…

VBA字典与数组第十六讲:行、列数不相同的数组间运算规律

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

分布式链路追踪Micrometer Tracing和ZipKin基础入门与实践

【1】概述 在分布式与微服务场景下&#xff0c;我们需要解决如下问题&#xff1a; 在大规模分布式与微服务集群下&#xff0c;如何实时观测系统的整体调用链路情况。 在大规模分布式与微服务集群下&#xff0c;如何快速发现并定位到问题。 在大规模分布式与微服务集群下&…

供应商管理软件:企业挑选新供应商的5个考量

在选择新的供应商时&#xff0c;企业必须进行细致的考量&#xff0c;这一决策对于依赖外部商品的零售商尤为关键。一段成功的合作伙伴关系不仅能够促进销售增长&#xff0c;还能提供稳定的服务支持。相反&#xff0c;失败的合作伙伴关系可能会导致客户不满、利润损失&#xff0…

一篇搞懂!LinuxCentos中部署KVM虚拟化平台(文字+图片)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f468;‍&#x1f4bb;Linux高级管理专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月28日15点11分 &#x1f004;️文章质量&#xff1a;94分 目录 ————前言———— KVM的优点 KVM…

机器人控制系列教程之Delta机器人运动学分析(2)

基于MATLAB的Delta机器人正向运动学模型求解 我们在上一篇推文 中&#xff0c;推导了Delta机器人的正向运动学&#xff0c;简单来说&#xff0c;就是我们可以通过机器人的末端位姿求解出对应的关节空间的角度&#xff08;位置&#xff09;。 最终我们分析该机器人的空间位置结…

服务器数据恢复—raid5阵列硬盘出现大量坏道的数据恢复案例

服务器存储数据恢复环境&故障&#xff1a; 一台DELL EqualLogic PS 4000存储中有一组由12块磁盘组建的raid5阵列&#xff0c;存储空间划分3个同等大小的卷&#xff0c;采用的VMFS文件系统。 两块硬盘指示灯亮黄色&#xff0c;raid5阵列崩溃&#xff0c;存储变得不可用。 服…

C++类型转换可调用对象

目录 C的四种可视性类型转换 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast C中的可调用对象 普通函数 函数指针 仿函数 Lambda表达式 包装器function bind C的四种可视性类型转换 C语言中的类型转换是不安全、不明确的&#xff0c;于是C就出了更…