Spring Security及若依安全实现,Java小白入门(九)

背景

  • 一个系统总会遇到安全,权限的问题,并且一坨坨的术语,让人恼火;更恼火的是官方一坨坨的代码实现,理不清剪不断;最最恼火的是你还得重新注入自己的一些实现,比如个性话的用户、个性化的权限,不得不重写一些接口和实现。
  • 最好的办法是,大概理清它们在哪里,然后,不至于想实现的时候找不到路径,那么一起看看spring security的基本原理和实现,以及若依又如何使用的,才会到以后该如何自己整一套。

Spring Security简介

  • Spring Security 最早叫 Acegi Security, 这个名称并不是说它和 Spring 就没有关系,它依然是为Spring 框架提供安全支持的。Acegi Security 基于 Spring,可以帮助我们为项目建立丰富的角色与权限管理系统。Acegi security 虽然好用,但是最为人诟病的则是它臃肿烦琐的配置这一问题最终也遗传给了 Spring Security。
  • Acegi Security 最终被并入 Spring Security 项目中,并于 2008 年4月发布了改名后的第一个版本 Spring Security 2.0.0,到目前为止,Spring Security 的最新版本己经到了 5.6.1。和 Shiro 相比,Spring Security重量级并且配置烦琐,直至今天,依然有人以此为理由而拒绝了解 Spring Security。其实,自从 Spring Boot 推出后,就彻底颠覆了传统了 JavaEE 开发,自动化配置让许多事情变得非常容易,包括 Spring Security 的配置。在一个 Spring Boot 项目中,我们甚至只需要引入一个依赖,不需要任何额外配置,项目的所有接口就会被自动保护起来了。在 Spring Cloud中,很多涉及安全管理的问题,也是一个 Spring Security 依赖两行配置就能搞定,在和 Spring 家族的产品一起使用时,Spring Security 的优势就非常明显了。

整体架构

  • 通过上一节,对于基本术语我们比较熟悉了,核心就是认证和授权,您是谁,您有什么权利,这两个看着有点相似的词一定区分好,Authentication (认证),Authorization(授权),AuthenticationManager 主要实现类为 ProviderManager,在 ProviderManager 中管理了众多 AuthenticationProvider 实例。很明显,可以有多个provider,允许有多种认证方式。SecurityContextHolder 用来获取登录之后用户信息。
  • AccesDecisionVoter 和 AccessDecisionManager 都有众多的实现类,在 AccessDecisionManager 中会换个遍历 AccessDecisionVoter,进而决定是否允许用户访问,因而 AaccesDecisionVoter 和 AccessDecisionManager 两者的关系类似于 AuthenticationProvider 和 ProviderManager 的关系。

基本原理

  • 在 Spring Security 中 认证、授权 等功能都是基于过滤器完成的。需要注意的是,默认过滤器并不是直接放在 Web 项目的原生过滤器链中,而是通过一个 FlterChainProxy 来统一管理。Spring Security 中的过滤器链通过 FilterChainProxy 嵌入到 Web项目的原生过滤器链中。FilterChainProxy 作为一个顶层的管理者,将统一管理 Security Filter。FilterChainProxy 本身是通过 Spring 框架提供的 DelegatingFilterProxy 整合到原生的过滤器链中。

Security Filters

  • 可以看出,Spring Security 提供了 30 多个过滤器。默认情况下Spring Boot 在对 Spring Security 进入自动化配置时,会创建一个名为 SpringSecurityFilerChain 的过滤器,并注入到 Spring 容器中,这个过滤器将负责所有的安全管理,包括用户认证、授权、重定向到登录页面等。SpringBootWebSecurityConfiguration这个类是 spring boot 自动配置类,通过这个源码得知,默认情况下对所有请求进行权限控制:

  • 中间省略一坨坨的逻辑分析,spring security 会到usreDetailService, 也就是及时没有持久化,也能看到登录

  • 绕了很多,我们回到如何自定义的认证以及自定义的授权,划重点,WebSecurityConfigurerAdapter 扩展 Spring Security 所有默认配置

  • 会用这个就可以,不能再看多了,越看越乱,不如我们看若依是如何实践这个内容的。

若依的安全

安全的配置

@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter

  • 里面的细节都要挨着读一读的,看代码最有意思

若依登陆过程及过滤器拦截器的使用:

用户登陆接口:1、把用户信息通过uuid即token作为key,存储在缓存中,并设置过期时间,2、通过jwt存储token,userId,userName在map中,设置过期时间,通过jwt创建一个编码后的access_token和expireTime,并返回token在前端

过滤器:用户前端传递的access_token通过Jwt解析,尝试获取userkey(即token),userid,username

并判断是否过期,为空等。如果异常即刻报错,否则将解析的userkey,userid,username纳入请求头中,请求接着交给拦截器。

拦截器:拦截器从请求头中获取userkey,userid,username,通过userkey从缓存中获取用户信息,并刷新缓存中用户信息的过期时间。并将用户信息加入到本地的TransmittableThreadLocal<Map<String, Object>>中,方便用户获取当前用户信息。

当然还有的很多内容,比如记住我,验证码, CSRF 漏洞保护,跨域,异常处理等等,都需要在这个基础上展开。

总结

在 Spring Security 中 认证、授权 等功能都是基于过滤器完成的。

如何自定义自己的一些安全策略, WebSecurityConfigurerAdapter 扩展 Spring Security 所有默认配置

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

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

相关文章

【普中开发板】基于51单片机音乐盒LCD1602显示( proteus仿真+程序+设计报告+讲解视频)

【普中开发板】基于51单片机音乐盒LCD1602显示( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;P08 1. 主要功能&#xff1a; 基于51单片机AT89C51/52&#…

【算法与数据结构】763、LeetCode划分字母区间

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题要求为&#xff1a; 1.尽可能多的划分片段2.字母只能出现在一个片段中3.片段连接起来仍然是s&…

RocketMQ5.0Pop消费模式

前言 RocketMQ 5.0 消费者引入了一种新的消费模式&#xff1a;Pop 消费模式&#xff0c;目的是解决 Push 消费模式的一些痛点。 RocketMQ 4.x 之前&#xff0c;消费模式分为两种&#xff1a; Pull&#xff1a;拉模式&#xff0c;消费者自行拉取消息、上报消费结果Push&#x…

L1-083:谁能进图书馆

题目描述 为了保障安静的阅读环境&#xff0c;有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆&#xff0c;除非有 18 岁以上&#xff08;包括 18 岁&#xff09;的成人陪同”。现在有两位小/大朋友跑来问你&#xff0c;他们能不能进去&#xff1f;请你写个程…

机器学习笔记 - 偏最小二乘回归 (PLSR)

一、偏最小二乘回归:简介 PLS 方法构成了一个非常大的方法族。虽然回归方法可能是最流行的 PLS 技术,但它绝不是唯一的一种。即使在 PLSR 中,也有多种不同的算法可以获得解决方案。PLS 回归主要由斯堪的纳维亚化学计量学家 Svante Wold 和 Harald Martens 在 20 世纪 80 年代…

智能安全帽定制_基于联发科MT6765安卓核心板方案

智能安全帽&#xff1a;解放双手&#xff0c;实现远程指导和可视化管理 智能安全帽在安全帽的基础功能上&#xff0c;高度集成了摄像头、语音、通信主板等模块&#xff0c;具有高清视频采集、语音通讯、对讲、本地视频存储等功能。它是一款真正意义上解放现场操作人员双手的穿戴…

《Linux系列》Linux磁盘MBR分区扩容

文章目录 Linux磁盘MBR分区扩容1.前言2.控制台磁盘扩容3.分区扩容3.1 fdisk3.2 lsblk3.3 扩容分区 4.扩容文件系统4.1 df4.2 扩容文件系统 Linux磁盘MBR分区扩容 1&#xff09;参考阿里云扩容分区文档&#xff0c;整理MBR分区扩容 2&#xff09;本文档适用于MBR分区(fdisk -lu查…

数据挖掘中的数据属性特点、描述性统计度量与相似度计算

目录 1. 引言 2. 数据挖掘中的数据属性 2.1 数值属性 2.2 标称属性 2.3 有序属性 2.4 无序属性 3. 描述性统计度量 3.1 中心趋势度量 3.2 离散程度度量 3.3 分布形状度量 4. 相似度计算 4.1 欧氏距离 4.2 余弦相似度 4.3 Jaccard 5. 数据挖掘中的案例应用 5.1 …

本科毕业四年,跳槽3次,从外包到年入20W,谁还没点绝活呢?

本人本科就读于某普通院校&#xff0c;毕业后通过同学的原因加入软件测试这个行业&#xff0c;角色也从测试小白到了目前的资深工程师&#xff0c;从功能测试转变为测试开发&#xff0c;并顺利拿下了某二线城市互联网企业Offer&#xff0c;年薪20W 。 选择和努力哪个重要&#…

Java经典面试题笔记

一&#xff0c;Java基础 1&#xff0c;说说你对面向对象的理解。 什么是面向对象呢&#xff1f;在所其是什么时&#xff0c;不妨我们先来说说以其不同的一个概念面向过程。面向过程是一个更加注重事情的每一个步骤即顺序&#xff0c;即是强调过程的。而面向对象更加注重有哪些…

Http状态:net::ERR_INCOMPLETE_CHUNKED_ENCODING

一、问题描述&#xff1a; 今天前端的小伙伴遇到一个js文件加载报错&#xff1a;net::ERR_INCOMPLETE_CHUNKED_ENCODING&#xff0c;不论如何刷新页面始终只有该文件加载失败&#xff0c;Chrome开发者工具中响应内容显示此请求没有可用的响应数据。 二、原因调查 排除非前端发…

Twincat中PLC编程的ST语言

在Twincat中&#xff0c;PLC编程使用的是Structured Text&#xff08;ST&#xff09;语言。ST语言是一种类似于Pascal的高级编程语言&#xff0c;专为工业自动化领域的程序开发而设计。它提供了结构化的控制流和数据操作&#xff0c;使得PLC编程更加高效和可靠。 https://kunal…