Spring Security的开发

文章目录

    • 1,介绍
    • 2, 核心流程
    • 3, 核心原理
      • 3.1 过滤器链机制
      • 3.2 主体
      • 3.3 认证
      • 3.4 授权
      • 3.5 流程图
    • 4, 核心对象
      • 4.1 UserDetailsService 接口
      • 4.2 PasswordEncoder 接口
      • 4.3 hasAuthority方法
      • 4.4 hasAnyAuthority方法
      • 4.5 hasRole方法
      • 4.5 hasAnyRole方法
    • 5, 核心注解
      • 5.1 @PreAuthorize
        • 5.1.1 在启动类上开启注解
        • 5.1.2 在方法上使用注解
      • 5.2 @PostAuthorize
        • 5.2.1 启动类上开启注解
        • 5.2.2 方法上使用注解
      • 5.3 @PostFilter
        • 5.3.1 实体类
        • 5.3.2 在方法上使用注解
        • 5.3.3 访问接口
      • 5.4 @PreFilter
        • 5.4.1 在方法上使用注解
      • 5.5 @Secured
    • 6, 使用步骤
      • 6.1 导入依赖
      • 6.2 创建项目
      • 6.3 测试
      • 6.4 自定义用户名和密码
      • 6.5 More...

1,介绍

Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的 成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方 案。 正如你可能知道的关于安全方面的两个主要区域是“认证”和“授权”(或者访问控 制),一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权 (Authorization)两个部分,这两点也是 Spring Security 重要核心功能。

Spring Security 是 Spring 家族中的一个安全管理框架,实际上,在 Spring Boot 出现之 前,Spring Security 就已经发展了多年了,但是使用的并不多,安全管理这个领域,一直 是 Shiro 的天下。 相对于 Shiro,在 SSM 中整合 Spring Security 都是比较麻烦的操作,所以,Spring Security 虽然功能比 Shiro 强大,但是使用反而没有 Shiro 多(Shiro 虽然功能没有 Spring Security 多,但是对于大部分项目而言,Shiro 也够用了)。

自从有了 Spring Boot 之后,Spring Boot 对于 Spring Security 提供了自动化配置方 案,可以使用更少的配置来使用 Spring Security。 因此,一般来说,常见的安全管理技术栈的组合是这样的:

• SSM + Shiro
• Spring Boot/Spring Cloud + Spring Security

2, 核心流程

权限的实现方式千千万,又有各种不同的权限模型,然而归结到代码上,无非两种:

  1. 基于 URL 地址的权限处理
  2. 基于方法注解的权限处理

Spring Security主要是从两个方面解决安全性问题:

  1. web请求级别:使用Servlet规范中的过滤器(Filter)保护Web请求并限制URL级别的访问。
  2. 方法调用级别:使用Spring AOP保护方法调用,确保具有适当权限的用户才能访问安全保护的方法(如:@PreAuthorize 注解)。

Spring Security两大重要核心功能:用户认证(Authentication)和用户授权(Authorization)。

  1. 用户认证:验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。
  2. 用户授权:验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,有的用户既能读取,又能修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。

3, 核心原理

3.1 过滤器链机制

Spring Security最核心的是过滤器链,也就是一组过滤器(Filter),所有的访问服务的请求都会经过spring security的过滤器,服务的响应也会经过spring security的过滤器再返回给客户端,并且这些过滤器在系统启动时springboot会自动都配置完成。

Spring Security 在基于Servlet应用中,其底层是采用了Filter机制实现了对请求的认证、授权和漏洞防御等功能。
简单来说,可以理解为给Servlet设置一些Filters,这些Filters就构成了一个FilterChain。
每次当请求进来时,首先会被FilterChain中的Filters 依次捕获得到,每个Filter可以对请求进行一些预处理或对响应进行一些后置处理,最后才会到达Servlet。

3.2 主体

英文单词:principal
使用系统的用户或设备或从其他系统远程登录的用户等等。简单说就是谁使用系 统谁就是主体。

3.3 认证

英文单词:authentication
权限管理系统确认一个主体的身份,允许主体进入系统。简单说就是“主体”证 明自己是谁。

3.4 授权

英文单词:authorization
将操作系统的“权力”“授予”“主体”,这样主体就具备了操作系统中特定功 能的能力。所以简单来说,授权就是给用户分配权限。

3.5 流程图

在这里插入图片描述

  1. UsernamePasswordAuthenticationFilter: 用于对/login的POST请求做拦截,校验表单中的用户名和密码。
  2. ExceptionTranslationFilter: 异常过滤器,用来处理在认证授权过程中抛出异常。
  3. FilterSecurityInterceptor:是一个方法级的权限过滤器,位于过滤器链的最底部。

4, 核心对象

4.1 UserDetailsService 接口

若需要从数据库中获取用户名和密码,则需要把查询数据库的过程写在这个接口里。
当什么也没有配置的时候,账号和密码是由 Spring Security 定义生成的。而在实际项目中 账号和密码都是从数据库中查询出来的。 所以我们要通过自定义逻辑控制认证逻辑。
如果需要自定义逻辑时,只需要实现 UserDetailsService 接口即可

4.2 PasswordEncoder 接口

在密码的处理上,需要进行编解码器,该接口实现对密码进行加密。

4.3 hasAuthority方法

判断当前主体是否有指定的权限,有返回true,否则返回false
该方法适用于只拥有一个权限的用户。
1. 修改配置类
在配置类中设置当前主体具有怎样的权限才能访问。

@Override
protected void configure(HttpSecurity http) throws Exception {//注销的配置http.logout().logoutUrl("/logout") //注销时访问的路径.logoutSuccessUrl("/logoutSuccess").permitAll(); //注销成功后访问的路径//配置没有权限的跳转页面http.exceptionHandling().accessDeniedPage("/error.html");http.formLogin().loginPage("/login.html") //设置自定义登陆页面.loginProcessingUrl("/usr/login") //登陆时访问的路径.defaultSuccessUrl("/index").permitAll() //登陆成功后跳转的路径.and().authorizeRequests().antMatchers("/","/add","/user/login").permitAll() //设置可以直接访问的路径,取消拦截//1.hasAuthority方法:当前登陆用户,只有具有admin权限才可以访问这个路径.antMatchers("/index").hasAuthority("admin").anyRequest().authenticated().and().csrf().disable()

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

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

相关文章

【Linux】系统开启和关闭过程

Linux 系统启动过程 BIOS 自检:在计算机开机时,BIOS 会进行自检,检查硬件设备是否正常。 加载引导程序:BIOS 自检完成后,会加载引导程序,如 GRUB、LILO 等。引导程序会加载内核和初始化 RAM 磁盘&#xff…

想入门Web测试,看这篇文章!

今天要谈的是很多软件测试工程师都需要面对的——Web测试 不管你是处在二十不惑的青春有你阶段还是三十而已的乘风破浪阶段我们都需要面对“Web测试”。 Web测试其实有以下几个方面: 1、页面测试 大多数的Web网站的网页都是html语言编写的,测试工程师…

3.3 RK3399项目开发实录-板载Ubuntu系统的使用(wulianjishu666)

嵌入式物联网常用90款传感器开发例程。链接:https://pan.baidu.com/s/1oisHMZXDzKqa4EspY83V-A?pwdo5f4 1. 介绍 Ubuntu 使用手册是针对 Firefly 官方发布的 Ubuntu 系统固件特性所编写,适用于 Ubuntu Desktop 与 Minimal 系统,部分与 UI 显…

开源文本挖掘引擎:情感分析|API接口|可私有化部署

中文的表达方式五花八门,比如成语、俗语、还有那些让人哭笑不得的双关语,这些都让情感分析变得复杂。再者,中文里头的情感表达很多时候得看上下文,一句话放在不同的情景里,意思可能就大相径庭了。 中文里面的否定和讽…

openGauss学习笔记-245 openGauss性能调优-SQL调优-典型SQL调优点-算子级调优

文章目录 openGauss学习笔记-245 openGauss性能调优-SQL调优-典型SQL调优点-算子级调优245.1 算子级调优245.1.1 算子级调优介绍245.1.2 算子级调优示例 openGauss学习笔记-245 openGauss性能调优-SQL调优-典型SQL调优点-算子级调优 SQL调优是一个不断分析与尝试的过程&#x…

Vector Magic:矢量图像转换神器,轻松驾驭Mac与Win双平台

在数字化时代,图像已经成为我们生活和工作中不可或缺的一部分。无论是设计师、艺术家,还是普通用户,都对图像质量有着极高的要求。而矢量图像,以其清晰度高、可无限放大的特点,逐渐受到广大用户的青睐。今天&#xff0…

长安链正式发布三周年,技术更迭支撑产业变革

导语: 2024年1月27日长安链正式发布三周年,开源社区借开年之际与大家一同回顾长安链三年来的技术发展历程,每一个里程碑的建设都得益于与长安链同行的合作伙伴与开发者,希望在2024年可以共同携手继往开来,为数字经济发…

2024腾龙杯web签到题-初识jwt(签到:这是一个登录页面)

什么是 jwt? 它是 JSON Web Token 的缩写,是一个开放标准,定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息,该信息可以被验证和信任,因为它是数字签名的。它就是一种认证机制,…

Kotlin: 协程的四种启动模式(CoroutineStart)

点击查看CoroutineStart英文文档 创建协程的三种方式 runBlocking 运行一个协程并且会阻塞当前线程,直到它完成。launch 启动一个新的协程,不会阻塞当前线程,并且返回一个Job,可以取消。async async和await是两个函数&#xff0c…

词令微信小程序怎么添加到我的小程序?

微信小程序怎么添加到我的小程序? 1、找到并打开要添加的小程序; 2、打开小程序后,点击右上角的「…」 3、点击后底部弹窗更多选项,请找到并点击「添加到我的小程序」; 4、添加成功后,就可以在首页下拉我的…

Elasticsearch:使用 OpenAI、LangChain 和 Streamlit 的基于 LLM 的 PDF 摘要器和 Q/A 应用程序

嘿! 您是否曾经感觉自己被淹没在信息的海洋中? 有这么多的书要读,而时间却这么少,很容易就会超负荷,对吧? 但猜猜怎么了? 你可以使用大型语言模型创建自定义聊天机器人,该模型可以帮…

CTF题型 Http请求走私总结Burp靶场例题

CTF题型 Http请求走私总结&靶场例题 文章目录 CTF题型 Http请求走私总结&靶场例题HTTP请求走私HTTP请求走私漏洞原理分析为什么用前端服务器漏洞原理界定标准界定长度 重要!!!实验环境前提POST数据包结构必要结构快速判断Http请求走私类型时间延迟CL-TETE-CL 练习例题C…

深入解析分布式ID生成机制

一、概述 背景:随着数据库数据量的增长, 基于性能原因需要进行分库分表,分库分表会导致主键ID重复问题。 特点: 全局唯一性[必须];趋势递增[非必须]。由于互联网大部分采用Mysql的Innodb引擎,因此保持有序主键ID有利于insert的效率;单调递增…

KKVIEW远程: TODESK退出了还能远程吗

Todesk退出了还能远程吗 当我们谈论Todesk或其他远程桌面软件时,一个经常被提及的问题是:当我退出Todesk后,是否仍然可以远程访问我的计算机?为了回答这个问题,我们首先需要了解Todesk的工作原理和远程访问的基本条件…

【视觉语言大模型+LLaVA1.0】大语言模型视觉助手(视觉指令调优)GPT4-Vision丐版

官方资源汇总: 项目主页 || https://huggingface.co/liuhaotian 23.04.LLaVA1.论文: Large Language and Vision Assistant(Visual Instruction Tuning) 23.10 LLaVA-1.5论文: Improved Baselines with Visual Instruction Tuning 23.11 LLaVA-Plus项目&…

李畑受邀出席第20届“韩国品牌大奖”颁奖典礼

2024年3月14日,第20届“韩国品牌大奖”颁奖典礼在韩国国家新闻中心举行。李畑女士受邀出席,和与会嘉宾一同见证这一年度盛事。 “韩国品牌大奖”是由政府主管的品牌奖项,旨在奖励在品牌经营方面作出突出贡献的企业和机构。该奖项依据公信力&a…

1.python安装

1.检查是否已经安装python 打开cmd 输入 python --version查看是否有返回版本,没有返回则环境变量未设置好,或者未安装 2.下载安转python https://www.python.org/downloads/windows/ 勾选配置环境变量路径 安装成功

外贸网站常用的wordpress模板

零件配件WordPress外贸建站模板 汽车行业零配件WordPress外贸建站模板,卖配件、零件的外贸公司可以使用的WordPress主题。 https://www.jianzhanpress.com/?p4912 WordPress外贸独立站主题 简洁实用的WordPress外贸独立站主题,适合时尚服装行业搭建w…

Java使用itextpdf往pdf中插入图片

引入maven依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.9</version> </dependency>java代码 import cn.hutool.extra.qrcode.QrCodeUtil; import com.itextpdf.text.*; i…

UE5中各类型的英文名称缩写(直接用于文件前缀)

真正开发项目时用到的素材文件是相当巨量的&#xff0c;在资产中查找时由于不区分文件夹&#xff0c;因此查找是比较头疼的&#xff0c;所以很多同类型的文件名命名时要加入缩写。 本文提供初学者内容包中的缩写&#xff0c;并会在此后陆续加入自定义的缩写&#xff08;本部分…