springSecurity学习笔记(一)

简介

  • Spring Security是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。
  • Spring Security基于过滤器链的概念,可以轻松地集成到任何基于Spring的应用程序中。它支持多种身份验证选项和授权策略,开发人员可以根据需要选择适合的方式。
  • 此外,Spring Security还提供了一些附加功能,如集成第三方身份验证提供商和单点登录,以及会话管理和密码编码等。
  • 总之,Spring Security是一个强大且易于使用的框架,可以帮助开发人员提高应用程序的安全性和可靠性。

登入校验流程

  1. 用户输入账号密码请求登入接口
  2. 后端根据参数去数据库查询是否存在用户
  3. 如果存在数据,会返回一个JWT
  4. 前端拿到JWT之后,访问其他请求都需要携带这个JWT
  5. 后端拿到JWT之后,解析并获取其中的用户信息
  6. 如果用户有权限则允许访问相关资源
    image-20211215093906256

查看springSecurity的过滤器链

  1. pom.xml添加如下依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  1. main方法
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(MybatisBatchInsertApplication.class, args);
        System.out.println("context = " + context);
    }

此处编写System.out.println("context = " + context);只是为了方便打断点
PixPin_2024-06-11_20-26-47

每一个过滤器的作用与功能

  1. WebAsyncManagerIntegrationFilter
  • 作用:确保在异步 Web 请求处理过程中,SecurityContext 能正确传递。
  • 功能:集成 Spring Security 与 Spring Web 的异步请求支持。
  1. SecurityContextPersistenceFilter
  • 作用:负责加载和存储 SecurityContext,它包含当前用户的安全信息。
  • 功能:在请求开始时加载 SecurityContext,在请求结束时存储 SecurityContext。
  1. HeaderWriterFilter
  • 作用:添加安全相关的 HTTP 头部。
  • 功能:例如,设置 X-Content-Type-Options、X-Frame-Options、X-XSS-Protection 头部来防止各种常见的攻击。
  1. CsrfFilter
  • 作用:防御跨站请求伪造(CSRF)攻击。
  • 功能:在每个请求中验证 CSRF 令牌,确保请求是由合法用户发出的。
  1. LogoutFilter
  • 作用:处理用户的注销请求。
  • 功能:执行注销逻辑,清除用户的认证信息和会话。
  1. UsernamePasswordAuthenticationFilter
  • 作用:处理基于表单的登录认证请求。
  • 功能:验证用户提交的用户名和密码,如果成功,生成认证信息并存储在 SecurityContext 中。
  1. DefaultLoginPageGeneratingFilter
  • 作用:生成默认的登录页面。
  • 功能:在没有自定义登录页面时,提供一个默认的登录页面。
  1. DefaultLogoutPageGeneratingFilter
  • 作用:生成默认的注销页面。
  • 功能:在没有自定义注销页面时,提供一个默认的注销页面。
  1. BasicAuthenticationFilter
  • 作用:处理 HTTP Basic 认证。
  • 功能:从 HTTP 请求头中提取用户名和密码,并进行认证。
  1. RequestCacheAwareFilter
  • 作用:处理请求缓存。
  • 功能:在用户登录后,自动重定向到登录前尝试访问的受保护资源。
  1. SecurityContextHolderAwareRequestFilter
  • 作用:为 HttpServletRequest 提供一些辅助方法。
  • 功能:使得请求对象在安全上下文中更便于使用,例如提供获取当前用户的方法。
  1. AnonymousAuthenticationFilter
  • 作用:为未认证的用户提供匿名身份。
  • 功能:如果用户没有登录,赋予其匿名身份,以便应用程序能够处理匿名用户的请求。
  1. SessionManagementFilter
  • 作用:处理会话管理相关的功能。
  • 功能:例如防止会话固定攻击,确保会话在用户认证之后安全。
  1. ExceptionTranslationFilter
  • 作用:将认证异常转换为适当的 HTTP 响应。
  • 功能:处理认证异常(如 AccessDeniedException 和 AuthenticationException),并将其转换为适当的 HTTP 状态码和错误信息。
  1. FilterSecurityInterceptor
  • 作用:执行最终的访问控制决策。
  • 功能:根据配置的访问决策管理器和投票器,决定请求是否被允许访问目标资源。

生成JWT的核心算法

    /**
    * 生成jwt
    * @param subject 需要加密的信息
    * @param ttlMillis 过期时间
    * @param uuid 唯一id
    * @return
    */
   private static JwtBuilder getJwtBuilder(String subject, Long ttlMillis, String uuid) {
       SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
       SecretKey secretKey = generalKey();
       long nowMillis = System.currentTimeMillis();
       Date now = new Date(nowMillis);
       if(ttlMillis==null){
           ttlMillis=JwtUtil.JWT_TTL;
       }
       long expMillis = nowMillis + ttlMillis;
       Date expDate = new Date(expMillis);
       return Jwts.builder()
               .setId(uuid)              
               .setSubject(subject)  
               .setIssuer("whs")     
               .setIssuedAt(now)
               //使用HS256对称加密算法签名, 第二个参数为秘钥
               .signWith(signatureAlgorithm, secretKey) 
               .setExpiration(expDate);
   }

解析JWT的核心算法

    /**
    * 解析jwt
    * @param jwt
    * @return
    * @throws Exception
    */
   public static Claims parseJWT(String jwt) throws Exception {
       SecretKey secretKey = generalKey();
       return Jwts.parser()
               .setSigningKey(secretKey)
               .parseClaimsJws(jwt)
               .getBody();
   }

持续输出 欢迎关注

搜索框传播样式-白色版

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

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

相关文章

记一次华为2288H V5更换主板的辛酸

1、开机提示找不到设备&#xff0c;通过带外检查硬盘raid是否正常&#xff0c;如果正常就不是硬件问题&#xff0c;也不会是线没接好 2、网络不通&#xff0c;服务重启啥的都正常不会报错&#xff0c;就是ping不通网关&#xff0c;后来通过带外发现是网卡漂移了。 核对mac地址发…

Docker 国内镜像源更换

实现 替换docker 镜像源 前提要求 安装 docker docker-compose 参考创建一键更换docker国内镜像源 Docker 镜像代理DaoCloud 镜像站百度云 https://mirror.baidubce.com南京大学镜像站

若依RuoYi-Vue分离版—增加通知公告预览及缩放功能

若依RuoYi-Vue分离版—增加通知公告预览及缩放功能 前言开发通知公告 前言 若依分离版的通知公告没有预览功能&#xff0c;想开发通知公告功能 开发通知公告 效果如下 具体开发内容 修改若依notice代码如下。 <template><div class"app-container"&g…

16. 《C语言》——【牛客网BC124 —— BC130题目讲解】

亲爱的读者&#xff0c;大家好&#xff01;我是一名正在学习编程的高校生。在这个博客里&#xff0c;我将和大家一起探讨编程技巧、分享实用工具&#xff0c;并交流学习心得。希望通过我的博客&#xff0c;你能学到有用的知识&#xff0c;提高自己的技能&#xff0c;成为一名优…

orbslam2代码解读(4):loopclosing回环检测线程

书接上回&#xff0c;介绍完了局部建图线程&#xff0c;局部建图线程在进行局部BA之后&#xff0c;也会将新的关键帧mpLoopCloser放进回环线程的mlpLoopKeyFrameQueue容器中。所以这时候回环检测线程就根据这个新的关键帧来进行回环检测的操作。 回环检测的主要程序 // 线程主…

websocket php workerman 服务器nginx配置wss协议

首先 Nginx的版本要高&#xff0c;尽量用当前最新稳定版本。 其次 WSS协议&#xff0c;是在HTTPS协议的基础上&#xff0c;进行协议升级&#xff0c;进行通讯的&#xff0c;所以先要保证你有一个 HTTPS正常的WEB站点。 所以&#xff0c;通过Nginx -V 请保证 一定有 --with-ht…

Spring-Security(二)OAuth2认证详解(持续更新)

Spring Security & Oauth2系列&#xff1a; Spring Security&#xff08;一&#xff09; 源码分析及认证流程 Spring Security&#xff08;二&#xff09;OAuth2认证详解及自定义异常处理 文章目录 1、OAuth2.0 简介1.1 OAuth2.0 相关名词解释1.2 四种授权模式 1.3 、OAu…

2023 hnust 湖科大 嵌入式 实验报告+代码及复习资料等

2023 hnust 湖科大 嵌入式 实验报告代码及复习资料等 目录 流水灯 1 8位数码管动态扫描 3 按键输入 5 温度与关照 7 看门狗 9 内容 报告 代码 下载链接 https://pan.baidu.com/s/1LIN8rm42yrukXliI3XyZ1g?pwd1111

Java高阶数据结构-----并查集(详解)

目录 &#x1f9d0;一.并查集的基本概念&实例&#xff1a; &#x1f92a;二.并查集代码&#xff1a; &#x1f602;三&#xff1a;并查集的一些习题&#xff1a; A.省份数量 B.等式方程的可满足性 &#x1f9d0;一.并查集的基本概念&实例&#xff1a; 并查集概念&…

vue操作蓝牙教程

项目背景 想在VUE中使用蓝牙功能&#xff0c;百度了好久也尝试了好多都没法实现。 概念讲价 如果要在浏览器中使用蓝牙&#xff0c;去搜索关键字【navigator.bluetooth】&#xff0c;搜索后发现这根本不是想要的结果。 解决方法 去搜索关键字【uniappbluetoothvue】&#x…

Web前端三大主流框架简介与优缺点对比分析

随着互联网的快速发展&#xff0c;Web前端开发技术不断进步&#xff0c;各种前端框架应运而生&#xff0c;极大地提高了开发效率和用户体验。在众多框架中&#xff0c;React、Vue.js 和 Angular 是目前最受欢迎的三大主流框架。本文将对它们进行详细介绍&#xff0c;并对它们的…

110.网络游戏逆向分析与漏洞攻防-装备系统数据分析-装备与技能描述信息的处理

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

网络数据库后端相关面试题(其三)

18&#xff0c; 传输控制协议tcp和用户数据报协议udp有哪些区别 第一&#xff0c;tcp是面向字节流的&#xff0c;基本的传输单位是tcp报文段&#xff1b;而udp是面向报文的&#xff0c;基本传输单位是用户数据报。 第二&#xff0c; tcp注重安全可靠性&#xff0c;连接双方在…

Linux网络 - HTTP协议

文章目录 前言一、HTTP协议1.urlurl特殊字符 requestrespond 总结 前言 上一章内容我们讲了在应用层制定了我们自己自定义的协议、序列化和反序列化。 协议的制定相对来讲还是比较麻烦的&#xff0c;不过既然应用层的协议制定是必要的&#xff0c;那么肯定已经有许多计算机大佬…

内存分配器性能优化

背景 在之前我们提到采用自定义的内存分配器来解决防止频繁 make 导致的 gc 问题。gc 问题本质上是 CPU 消耗&#xff0c;而内存分配器本身如果产生了大量的 CPU 消耗那就得不偿失。经过测试初代内存分配器实现过于简单&#xff0c;产生了很多 CPU 消耗&#xff0c;因此必须优…

果汁机锂电池充电,5V升压12.7V 升压恒压芯片SL1571B

在现代化的日常生活中&#xff0c;果汁机已经逐渐成为了许多家庭厨房的必备电器。随着科技的不断进步&#xff0c;果汁机的性能也在不断提升&#xff0c;其中锂电池的应用更是为果汁机带来了前所未有的便利。而5V升压12.7V升压恒压芯片SL1571B&#xff0c;作为果汁机锂电池充电…

skywalking9.4 链路追踪

下载&#xff0c;很慢很慢很慢&#xff01;&#xff01;&#xff01;&#xff01; jdk 使用jdk17 skywalking-apm 9.4 java-agent 9.0 idea 本地开发配置 第1行配置按实际来&#xff1b; 第2行自定义&#xff0c;一般和微服务名称相同&#xff1b; 第3行ip写安装的机器ip,端…

QQ音乐绿钻API接口:解锁更多音乐可能性

在我们日常生活中&#xff0c;音乐是不可或缺的一部分。无论是在上班途中&#xff0c;还是在健身房锻炼时&#xff0c;我们都可以通过听音乐来放松自己。然而&#xff0c;在现如今的音乐市场中&#xff0c;有时候我们会觉得收听的歌曲有限&#xff0c;想要尝试更多不同的音乐类…

量产导入 | DFT和ATE概述

什么是DFT DFT(Design for Test),即可测性设计。 一切为了芯片流片后测试所加入的逻辑设计,都叫DFT。 DFT只是为了测试芯片制造过程中有没有缺陷,而不是用来验证芯片功能的,芯片功能的完善应该应该是在芯片开发过程用先进验证方法学去做的。 芯片制造过程相当复杂,工艺缺陷…

降价潮背后:大模型落地门槛真的降了吗?

“比起价格门槛&#xff0c;AI大模型的应用门槛&#xff0c;更难跨越。” 大模型争相降价下&#xff0c;AI应用的门槛真的降低了吗&#xff1f; 答案还真不一定。因为除了价格门槛&#xff0c;AI大模型还有应用门槛。甚至&#xff0c;后者比前者更具挑战性。 B端业务场景向来…