当前位置: 首页 > news >正文

15. 若依框架的Security Config

在framework/SecurityConfig.java中,filterChain定义应用程序的安全规则(认证和授权),配置如下:

protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception{return httpSecurity// CSRF禁用,因为不使用session.csrf(csrf -> csrf.disable())// 禁用HTTP响应标头.headers((headersCustomizer) -> {headersCustomizer.cacheControl(cache -> cache.disable()).frameOptions(options -> options.sameOrigin());})// 认证失败处理类.exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler))// 基于token,所以不需要session.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))// 注解标记允许匿名访问的url.authorizeHttpRequests((requests) -> {permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());// 对于登录login 注册register 验证码captchaImage 允许匿名访问requests.antMatchers("/login", "/register", "/captchaImage").permitAll()// 静态资源,可匿名访问.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll().antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()// 除上面外的所有请求全部需要鉴权认证.anyRequest().authenticated();})// 添加Logout filter.logout(logout -> logout.logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler))// 添加JWT filter.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class)// 添加CORS filter.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class).addFilterBefore(corsFilter, LogoutFilter.class).build();}
  1. pring Security 提供的构建器,用于配置 HTTP 请求的安全性
  2. csrf(csrf -> csrf.disable()) ,禁用 CSRF(适用于 REST API + JWT)
  3. .防止浏览器缓存敏感数据(cacheControl) 防止点击劫持(frameOptions)
headers((headersCustomizer) -> {headersCustomizer.cacheControl(cache -> cache.disable())  // 禁用缓存控制.frameOptions(options -> options.sameOrigin());  // 允许同源 iframe 嵌入
})
  1. exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler))

当未认证用户访问受保护资源时,会调用 unauthorizedHandler(通常是返回 401 错误)。

  1. sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))

STATELESS 表示不创建 HttpSession,适用于 JWT / OAuth2 等无状态认证方式。

  1. url访问权限定义
    permitAll():允许匿名访问(无需登录)。
    authenticated():必须认证后才能访问。
    一会还要专门说匿名访问
.authorizeHttpRequests((requests) -> {permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());requests.antMatchers("/login", "/register", "/captchaImage").permitAll()  // 允许匿名访问.antMatchers(HttpMethod.GET, "/", "/**/*.html", "/**/*.css", "/**/*.js").permitAll()  // 静态资源放行.antMatchers("/swagger-ui.html", "/swagger-resources/**").permitAll()  // Swagger 放行.anyRequest().authenticated();  // 其他所有请求需要认证
})
  1. 自定义过滤器
// 添加JWT filter
.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class)
// 添加CORS filter
.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class)
.addFilterBefore(corsFilter, LogoutFilter.class)

匿名访问

允许匿名访问的URL路径,通过下面方法进行定义,afterPropertiesSet方法在Spring Bean 初始化完成后执行
在这里插入图片描述

  1. 获取所有controller请求方法@RequestMapping
  2. 从请求的所有方法中获取注解为@Anonymous的方法
  3. 请求参数替换

获取该方法的 URL 路径(info.getPatternsCondition().getPatterns())。 使用
RegExUtils.replaceAll(url, PATTERN, ASTERISK) 将路径变量(如 {id})替换为 (如
/user/
)。 将处理后的 URL 加入 urls 集合。

也就是当我们的Controller层的方法,被Anonymous修饰后可以跳过认证

  1. 如果注解是整个类上@Anonymous,则下面的方法都是白名单

过滤器在后面介绍

http://www.lryc.cn/news/606612.html

相关文章:

  • 微服务消息队列之RabbitMQ,深入了解
  • Docker状况监控
  • 加密与安全
  • Idea集成Jenkins Control插件,在IDEA中触发Jenkins中项目的构建
  • LLM Prompt与开源模型资源(2)提示工程关键技术
  • GaussDB 数据库设计规范
  • JavaScript 高效入门指南:从基础到实战(VSCode 版)
  • 【03】海康MVS V4.3.0 ——安装教程、查看示例、库、头文件、开发指南
  • 应用app的服务器如何增加高并发
  • 解读LISA:通过大型语言模型实现推理分割
  • 【无标题】严谨推导第一代宇宙的创生机制,避免无限回溯问题。
  • alaxea机器人由星海图人工智能科技有限公司研发的高性能仿人形机器人
  • 渗透测试常用指令
  • SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:日志管理(四)集成Spring Security
  • 如何将消息转移到新 iPhone
  • 1688商品评论API接口逆向分析与数据采集
  • 视频质量检测中卡顿识别准确率↑32%:陌讯多模态评估框架实战解析
  • 2025年文生图模型stable diffusion v3.5 large的全维度深度解析
  • 嵌入式系统中常用通信协议
  • RAGFlow Agent 知识检索节点源码解析:从粗排到精排的完整流程
  • 电脑的时间同步电池坏掉了,每次开机都要调整时间
  • 江协科技STM32 11-4 SPI通信外设
  • 生物医药研究数据分析工具测评:衍因科技如何重塑科研范式?
  • Git Pull 时遇到 Apply 和 Abort 选项?详解它们的含义与应对策略
  • LeetCode 面试经典 150_数组/字符串_买卖股票的最佳时机(7_121_C++_简单)(贪心)
  • 《黑马笔记》 --- C++ 提高编程
  • 【数据结构入门】时间、空间复杂度的计算
  • 基于C++的protobuf协议使用(四)项目应用与总结
  • 2025 年 7 月 TIOBE 指数
  • 数据结构: 双向链表