springSecurity(一):认识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();
   }

后台回复springSecurity获取项目完整代码

搜索框传播样式-白色版

相关推荐

  1. SpringSecurity

    2024-06-18 16:56:07       20 阅读
  2. 微服务下SpringSecurity认证

    2024-06-18 16:56:07       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 16:56:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 16:56:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 16:56:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 16:56:07       20 阅读

热门阅读

  1. ffmpeg压缩视频

    2024-06-18 16:56:07       5 阅读
  2. 公有云和私有云有什么区别?详情介绍有关内容

    2024-06-18 16:56:07       5 阅读
  3. OpenGL绘制Bezier曲线

    2024-06-18 16:56:07       6 阅读
  4. Mybatis和Hibernate的作用区别及底层原理分析

    2024-06-18 16:56:07       8 阅读
  5. 李宏毅深度学习项目——HW1个人笔记

    2024-06-18 16:56:07       7 阅读
  6. Linux 常用命令 - rm 【删除文件或目录】

    2024-06-18 16:56:07       9 阅读
  7. 【二维码】

    2024-06-18 16:56:07       5 阅读
  8. Docker的安装 - 简单易懂

    2024-06-18 16:56:07       4 阅读
  9. 常见端口大全

    2024-06-18 16:56:07       5 阅读