springSecurity学习笔记(一)

news2024/12/23 3:09:58

简介

  • 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();
   }

持续输出 欢迎关注

搜索框传播样式-白色版

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

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

相关文章

高校运维赛 2024 easyshell

考点: 冰蝎流量解密部分明文攻击 看请求路由可以知道 shell.php是上传的马子 过滤器 http 加密返回包前16为完整base编码字符 一眼冰蝎流量解密 爆破aes常用密码 就是冰蝎默认aes密码 e45e329feb5d925b 冰蝎从开头流量都是连接初始化之类的,一般关键数据在后面 从后向前看发现…

电影推荐系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;免费电影管理&#xff0c;付费电影管理&#xff0c;电影论坛管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;付费电影&#…

CMake的学习之路

目录 一、基础命令 二、编译选项和设置 三、文件和目录操作 四、控制流命令 五、其他命令 六、CMake构建级别 CMake是一个跨平台的自动化建构系统&#xff0c;它使用一种人类可读的配置文件&#xff08;CMakeLists.txt&#xff09;来控制软件编译过程。以下是CMake中的一些…

python-Numpy及Pandas数据分析应用

读取文件team.xlsx数据&#xff0c;其中name&#xff1a;名字, team&#xff1a;所属团队, Q1&#xff1a;语文分数, Q2&#xff1a;数学分数, Q3&#xff1a;英语分数, Q4&#xff1a;政治分数 # (1) 查询该数据的索引、所有值、列名、数据类型、元素个数、维度以及形状 imp…

【C++课程学习】:Data类的实现

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f369;1.头文件 &#x1f369;2.实现文件&#xff1a; &#x1f369;3.分析&#xff1a; &…

ARM32开发--PWM与通用定时器

知不足而奋进望远山而前行 目录 文章目录 前言 学习目标 学习内容 PWM pwm原理 需求 开发流程 初始化PWM PWM占空比控制 main函数修改duty 输出通道 关心的内容 重要的关键词 周期 分频 占空比 总结 前言 在微控制器开发中&#xff0c;理解和掌握PWM&#x…

计算机网络:网络层 - IPv4地址

计算机网络&#xff1a;网络层 - IPv4地址 分类编址划分子网子网掩码 无分类编址 CIDRCIDR 地址块构造超网 在酒店中&#xff0c;每个房间都有门牌号码&#xff0c;服务员送餐时&#xff0c;就可以根据门牌号码来判断一份餐要送到那个房间。 在网络中也是如此&#xff0c;一份…

泵制造5G智能工厂工业物联数字孪生可视化,推进制造业数字化转型

泵制造5G智能工厂工业物联数字孪生可视化&#xff0c;推进制造业数字化转型。泵制造行业&#xff0c;作为工业领域的核心部分&#xff0c;更是急需通过技术创新实现生产流程的智能化和高效化。而5G智能工厂工业物联数字孪生可视化技术的出现&#xff0c;为泵制造业的数字化转型…

【全网最齐报错的解决方法!】运行mvn命令打包项目jar包报错?“Fatal error compiling: 无效的目标发行版: 19 ”, 让我来看看~

最近写实验&#xff0c;要打包项目&#xff0c;但是不管是在cmd运行“mvn clean package -Dmaven.test.skiptrue”命令&#xff0c;还是在idea上去操作&#xff0c;都出现了这样的一个错误&#xff1a; [EROR] Failed to exeoute goal org.apache.maven.plugins:maven-comnpile…

作业6.11

练习1&#xff1a;输入一个数&#xff0c;判断是否是完美数 完美数&#xff1a;正序和逆序的结果一致 练习2&#xff1a; * ** *** **** for(int i0;i<4;i){for(int y1;y<4-i;y){ printf(" ");}for(int j0;j<i;j){printf("*&quo…

zabbix-agent如何版本回退降低?

文章目录 1&#xff0c;查看zabbix-agent版本号2&#xff0c;查看zabbix-server的版本号3&#xff0c;卸载已有的zabbix-agent4&#xff0c;找到与zabbix-server匹配版本的zabbix-agent5&#xff0c;安装zabbix-agent 5.0.42版本6&#xff0c;查看已安装的zabbix-agent的版本号…

谁是最会写作文的AI“考生”?“阅卷老师”ChatGPT直呼惊艳!

文章推荐 粽叶飘香&#xff0c;端午安康&#xff01;AI视频送祝福啦~ AI日报&#xff5c;文生语音大模型国内外均有突破&#xff0c;Pika完成6亿新融资&#xff0c;视频大模型也不远了&#xff01; ⭐️搜索“可信AI进展“关注公众号&#xff0c;获取当日最新AI资讯 一年一…

Visual Studio 调试 Win32 出现 Task Manager / Explorer 无法打开,无法关机/重启

现象 Access is denied 无法关机 无法通过开始 -> 关机/重启 进行关机或者重启 无法打开新的应用 无法通过开始 -> 双击应用打开新的应用 已打开应用的使用不受影响 已经打开的应用可以正常操作 原因 杀毒软件&#xff1b;关掉杀毒软件就好了 问题查找过程 参考…

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

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

项目:双人五子棋对战-对战模块(6)

完整代码见: 邹锦辉个人所有代码: 测试仓库 - Gitee.com 当玩家进入到游戏房间后, 就要开始一局紧张而又刺激的五子棋对战了, 本文将就前端后端的落子与判断胜负的部分作详细讲解. 模块详细讲解 约定前后端交互的接口 首先是建立连接后, 服务器需要生成一些游戏的初始信息(可…

一五零、MAC 安装mysql可视化工具连接

mysql安装&#xff0c;按照网上教程一步步安装&#xff08;官网下载安装包->解压->完成安装&#xff09;&#xff0c;最后在「系统偏好设置」无法启动mysql。 原因&#xff1a;下载的版本是8.0最新版本&#xff0c;MAC上这种方法无法启动成功。 解决方法 换低版本的mys…

JDBC开发之四大核心API:DriverManager Connection Statement ResultSet

DriverManager 方法都是静态的 注册驱动 在Mysql5之后我们就不用注册驱动了 在jar包里已经写好了 读取文件 第二个方法 如果连接的是主机mysql并且端口是默认的3306 则可以简化书写 代码书写 import java.sql.Connection; import java.sql.DriverManager; import java.sql.S…

微软的这个按钮又双叒叕变了位置?有时候还不见了……

前言 小白最近打开Windows11系统的时间比较少&#xff0c;大部分时间都还是喜欢用MacBookPro码字。 之前小白写过一篇关于微软系统左下角的这个神奇按钮 Windows11更新之后&#xff0c;电脑左下角多出了一个奇怪的按钮&#xff08;点我跳转查看&#xff09; 没错&#xff0…

vivado HW_SIO_GT

描述 Xilinx的可定制LogiCORE™IP集成误码率测试仪&#xff08;IBERT&#xff09;核心 FPGA是为评估和监控千兆收发器&#xff08;GTs&#xff09;而设计的。IBERT core支持系统内串行I/O验证和调试&#xff0c;使您能够进行测量和优化 您的设计中的高速串行I/O链路。参考综合误…

webpack--压缩,代码的拆分,tree shinking

Terser 对代码进行压缩、丑化 const TerserPlugin require("terser-webpack-plugin");optimization: { minimize: true, //在开发环境下启用 CSS 优化minimizer: [new TerserPlugin({extractComments: false,terserOptions: {compress: {arguments: true,// 将函数…