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

点击查看项目完整代码

持续输出 欢迎关注

搜索框传播样式-白色版

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

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

相关文章

海洋CMS /js/player/dmplayer/dmku/ SQL注入漏洞复现(CVE-2024-29275)

0x01 产品简介 海洋CMS是一套专为不同需求的站长而设计的内容管理系统&#xff0c;灵活、方便、人性化设计、简单易用是最大的特色&#xff0c;可快速建立一个海量内容的专业网站。海洋CMS基于PHPMySql技术开发&#xff0c;完全开源免费 、无任何加密代码。 0x02 漏洞概述 海…

Jsch上传本地目录文件到服务器

文章目录 1.Jsch简介1.1 什么是Jsch1.2 Jsch使用步骤和简单示例 2.技术关键点3.Jsch实战3.1 maven依赖3.2 功能实现3.3 效果3.4 封装工具类 4.总结 摘要: 在一些框架开发工作中&#xff0c;需要为项目使用说明文档&#xff0c;来指导用户如何正确使用框架。比如通过markdown编写…

一文搞懂阻塞赋值和非阻塞赋值

目录 2.非阻塞赋值举例3.阻塞赋值举例4.总结 微信公众号获取更多FPGA相关源码&#xff1a; # 1.阻塞赋值和非阻塞赋值的区别&#xff1a; (1)阻塞赋值""&#xff0c;必须是阻塞赋值完成后&#xff0c;才进行下一条语句的执行&#xff1b;赋值一旦完成&#xff0c;等号…

pytest+requests+allure自动化测试接入Jenkins学习

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 最近在这整理知识&#xff0c;发现在pytest的知识文档缺少系统性&#xff0c;这里整理一下&…

陕西移动联合中兴通讯,赋能5G RedCap智慧工厂建设

前不久&#xff0c;陕西移动联合中兴通讯、高新兴等产业伙伴在中兴通讯西安智能终端生产基地顺利完成5G RedCap在智慧工厂的应用实践。本次实践证明了5G RedCap在智慧工厂场景下的应用可行性&#xff0c;为RedCap在工业智能制造行业的应用打下基础。   5G RedCap技术是5G-A实现…

【cocos creator 3.x】 修改builtin-unlit 加了一个类似流光显示的mask参数

效果见图&#xff1a; shader 代码修改如下&#xff0c; 主要看 USE_MASK_UVY 关键字部分修改&#xff1a; // Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd. CCEffect %{techniques:- name: opaquepasses:- vert: unlit-vs:vertfrag: unlit-fs:fragproperties: &a…

Linux-centos7 nvm使用

NVM下载使用 文件夹创建拉取nvm包在~/.bashrc的末尾&#xff0c;添加如下语句验证nvm是否安装成功 文件夹创建 mkdir /root/home/software/拉取nvm包 cd /root/home/software/ wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.38.0.tar.gz tar xvzf v0.38.0.tar.g…

MyBatis-Plus整合达梦数据库

文章目录 1. 环境准备2. 创建Spring Boot项目3. 引入依赖4. 配置数据源5. 配置MyBatis-Plus6. 创建实体类7. 创建Mapper接口8. 创建Service类9. 创建Controller类10. 创建Mapper XML文件11. 测试12. 进一步优化12.1 配置分页插件12.2 配置乐观锁插件13. 总结🎉欢迎来到Java学…

【Linux】常见指令的使用

文章目录 which指令stat 指令wc指令echo指令tree 指令whoami指令clear指令alias指令ls指令pwd指令cd 指令touch指令mkdir指令&#xff08;重要&#xff09;rmdir指令 && rm 指令&#xff08;重要&#xff09;man指令&#xff08;重要&#xff09;cp指令&#xff08;重要…

Java课程设计:基于swing的贪吃蛇小游戏

文章目录 一、项目介绍二、核心代码三、项目展示四、源码获取 一、项目介绍 贪吃蛇是一款经典的休闲益智游戏,自问世以来便深受广大用户的喜爱。这个游戏的基本玩法是控制一条不断增长的蛇,目标是吃掉屏幕上出现的食物,同时避免撞到边缘或自身。随着游戏的进行,蛇的身体会越长…

Burp Suite使用及BruteForc_test靶场实战

简介 Burp Suite是用于攻击和测试Web应用程序安全性的集成平台&#xff0c;包含多个协同工作的工具&#xff0c;支持信息共享与复杂攻击。设计有加速攻击流程的接口&#xff0c;所有工具共享强大框架&#xff0c;处理HTTP消息、持久性、认证、代理、日志和警报。主要用于安全性…

grpc代理服务的实现(一)

最近公司需要无感知基于服务代号来实现通信, 并监控和管理通信连接&#xff0c;目前公司使用的是如下的逻辑(当然逻辑简化了&#xff0c;但是思想不变) 目录 简单的原理图代理服务的实现创建 tls tcp 服务, 用于grpc client 和 grpc service 通信保存 与 代理服务建立的 grpc …

Codeforces Round 926 (Div. 2)(A~C题解)

A题是个签到题&#xff0c;BC思维题目&#xff0c;搞出来结论就秒了&#xff0c;D题是个树上DP由于现在水平薄弱还没做出来&#xff0c;以后补上 A. Sasha and the Beautiful Array 思路给数组排序&#xff0c;然后后项减前项&#xff0c;累加值就是最终结果&#xff0c;签到题…

AI 大模型的赛点:通用与垂直之争

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

短视频矩阵源码---矩阵托管1000个账号如何正规开发规则实现

一、短视频矩阵源码开发实现规则&#xff1a; 1.首先是确保各个官方平台api接口的稳定性&#xff0c;一定要是各个平台正规的api 2.其次是保证服务器运行&#xff0c;带宽保证能够并行&#xff0c;目前我们这边用的是源码所需服务器配置&#xff1a;规格:最低8核16G2、硬盘:系…

GIS之arcgis系列10:arcpy实现批量掩膜提取

按掩膜提取 (Spatial Analyst) 提取掩膜所定义区域内的相应栅格像元。 OutRas ExtractByMask(InRas1, InMsk1, "INSIDE") 使用情况 输入栅格中的其他属性&#xff08;若有的话&#xff09;将按照原样添加到输出栅格属性表。 根据所记录的属性&#xff0c;某些属性…

【NLP练习】Transformer中的位置编码

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、什么是位置编码 1. 位置编码定义 Transformer 模型中的位置编码是为了在处理序列数据时引入位置信息&#xff0c;以便模型能够分辨输入序列中不同位置的词…

蓝卓为中小制造企业注入数字化转型活力

随着劳动力成本上升,原材料价格上涨,企业生产成本逐年增加&#xff0c;市场竞争越来越激烈&#xff0c;传统的中小制造企业面临着巨大的压力。 通过数字化转型应对环境的变化已成为行业共识&#xff0c;在数字化的进程中&#xff0c;中小企业首要考虑生存问题&#xff0c;不能…

Kubernetes集群持久化部署实践

WordPress 网站持久化部署 要持久化MariaDB 可以把 Deployment 改成了 StatefulSet&#xff0c;修改 YAML添加“serviceName”“volumeClaimTemplates”这两个字段&#xff0c;定义网络标识和 NFS 动态存储卷&#xff0c;然后在容器部分用“volumeMounts”挂载到容器里的数据目…

八 、VS的调试技巧

--- 24.4.20 目录 1、什么是Bug&#xff1f; 2、什么是调试&#xff08;Debug&#xff09;&#xff1f; 3、Debug和Release 4、VS基础调试快捷键 4.1、环境准备 4.2、调试快捷键 5、监视和内存观察 5.1、监视窗口 5.2、内存窗口 6、调试举例1 7、调试举例2 8、调试…