欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > springSecurity学习笔记(一)

springSecurity学习笔记(一)

2024/10/25 0:31:39 来源:https://blog.csdn.net/qq_43586337/article/details/139608463  浏览:    关键词: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();}

持续输出 欢迎关注

搜索框传播样式-白色版

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com