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

WebConfig的登录与放行

文件作用

  • 整体定位: 这是 Spring MVC 的全局 Web 配置类,继承 WebMvcConfigurationSupport,用于统一配置静态资源映射、拦截器链以及字符编码过滤器等。
  • 主要内容:
    • addResourceHandlers:配置静态资源与 Swagger 相关资源的访问路径与缓存策略。
    • @Bean:注册三个拦截器 Bean(CommandInterceptorAdminUserInterceptorClientUserInterceptor)和 CharacterEncodingFilter
    • addInterceptors:将上述拦截器加入到 Spring MVC 的拦截器链,对不同 URL 前缀进行权限或登录校验。

63-99 行详解(拦截器 URL 规则)

        // 后台拦截registry.addInterceptor(adminUserInterceptor()).addPathPatterns("/backendApi/**").excludePathPatterns("/clientApi/captcha/**").excludePathPatterns("/backendApi/captcha/**").excludePathPatterns("/backendApi/userCoupon/exportList").excludePathPatterns("/backendApi/order/export").excludePathPatterns("/backendApi/goods/goods/downloadTemplate").excludePathPatterns("/backendApi/member/downloadTemplate").excludePathPatterns("/backendApi/login/**");// 客户端拦截registry.addInterceptor(portalUserInterceptor()).addPathPatterns("/clientApi/**").excludePathPatterns("/clientApi/sign/**").excludePathPatterns("/clientApi/page/home").excludePathPatterns("/clientApi/captcha/**").excludePathPatterns("/clientApi/goodsApi/**").excludePathPatterns("/clientApi/coupon/list").excludePathPatterns("/clientApi/coupon/detail").excludePathPatterns("/clientApi/cart/**").excludePathPatterns("/clientApi/user/**").excludePathPatterns("/clientApi/settlement/submit").excludePathPatterns("/clientApi/pay/doPay").excludePathPatterns("/clientApi/pay/weixinCallback").excludePathPatterns("/clientApi/pay/weixinRefundNotify").excludePathPatterns("/clientApi/pay/aliPayCallback").excludePathPatterns("/clientApi/order/todoCounts").excludePathPatterns("/clientApi/store/**").excludePathPatterns("/clientApi/article/**").excludePathPatterns("/clientApi/message/getOne").excludePathPatterns("/clientApi/message/wxPush").excludePathPatterns("/clientApi/sms/sendVerifyCode").excludePathPatterns("/clientApi/book/list").excludePathPatterns("/clientApi/book/detail").excludePathPatterns("/clientApi/book/cateList");
  • 后台拦截(AdminUserInterceptor

    • 生效范围: "/backendApi/**"(所有后台接口默认需要管理员拦截/鉴权)。
    • 放行路径:
      • "/backendApi/login/**":后台登录相关必须不经鉴权。
      • "/backendApi/captcha/**""/clientApi/captcha/**":验证码类接口公开访问。
      • 导出/模板下载类接口:/backendApi/userCoupon/exportList/backendApi/order/export/backendApi/goods/goods/downloadTemplate/backendApi/member/downloadTemplate 通常用于工具/下载,允许在无会话或特殊场景下访问(便于外部触发或前端直接下载)。
  • 客户端拦截(ClientUserInterceptor

    • 生效范围: "/clientApi/**"(客户端接口默认需要登录/鉴权)。
    • 放行路径(典型“游客可用/必须公开”的业务接口):
      • 认证/入口类:/clientApi/sign/**(注册/登录等)、/clientApi/page/home(首页)、/clientApi/captcha/**(验证码)。
      • 商品/内容浏览:/clientApi/goodsApi/**/clientApi/coupon/list/clientApi/coupon/detail/clientApi/store/**/clientApi/article/**/clientApi/book/list|detail|cateList
      • 购物流程中的公开/半公开:/clientApi/cart/**(购物车)、/clientApi/settlement/submit(提交结算,通常需要服务端内部校验单独处理)、/clientApi/order/todoCounts(待办数量,可能用于引导展示)。
      • 支付相关(第三方回调/前置发起需公开):/clientApi/pay/doPay/clientApi/pay/weixinCallback/clientApi/pay/weixinRefundNotify/clientApi/pay/aliPayCallback
      • 用户与消息(此处放行整个 /clientApi/user/**,说明该模块内部可能再细分鉴权或仅包含注册找回等公开接口):/clientApi/user/**/clientApi/message/getOne/clientApi/message/wxPush
      • 短信:/clientApi/sms/sendVerifyCode(发送验证码必须公开)。
  • 整体机制说明:

    • addPathPatterns 设定基础拦截范围,excludePathPatterns 列出无需拦截的白名单。
    • 这些规则确保“需要登录/权限”的接口被拦截,而“登录前可访问、第三方回调、下载/导出、内容浏览”等场景被放行,平衡安全与可用性。
  • 注意点:

    • WebMvcConfigurationSupport 会覆盖 Spring Boot 的默认 MVC 自动配置,已在 addResourceHandlers 中手动补齐静态资源映射,避免静态资源404。
    • /clientApi/user/** 整体放行较为宽松,需确认对应控制器内部是否再做细粒度鉴权,以免暴露敏感接口。
  • 我将先给出高层说明,再逐项解读 63-99 行的拦截与放行规则。

http://www.xdnf.cn/news/18847.html

相关文章:

  • 对比视频处理单元(VPU)、图形处理器(GPU)与中央处理器(CPU)
  • 前端-从零开始在本机部署一个前端项目
  • 流程控制语句(1)
  • Dify 从入门到精通(第 59/100 篇):Dify 的自动化测试(进阶篇)
  • 野火STM32Modbus主机读取寄存器/线圈失败(一)-解决接收中断不触发的问题
  • 嵌入式-定时器的时基单元,自制延迟函数-Day21
  • AI驱动的前端性能优化:从监控到自动化修复
  • C# 字符和字符串
  • 《信息检索与论文写作》实验报告三 中文期刊文献检索
  • 【算法速成课1 | 题解】洛谷P3366 【模板】最小生成树 MST(Prim Kruskal)
  • GitHub 宕机自救指南:保障开发工作连续性
  • Android中点击链接跳转到对应App页面的底层原理
  • 信号线串扰仿真
  • 【C++】类和对象 --- 类中的6个默认成员函数
  • 达梦数据库-控制文件 (二)
  • 如何在开发工具中使用钉钉MCP
  • 数据结构:在堆中插入元素(Inserting In a Heap)
  • 深度学习-----详解MNIST手写数字数据集的神经网络实现过程
  • Magicodes.IE.Pdf 生成导出PDF文件 bytes Stream FileStreamResult 下载
  • MYSQL---存储过程
  • 能源行业数据库远程运维安全合规实践:Web化平台的落地经验
  • AI 暗战: 回声室攻击 —— 解锁大模型安全防御的隐秘战场
  • [Sync_ai_vid] 唇形同步评判器 | 图像与视频处理器 | GPU测试
  • 【RabbitWQ】基于 Java 实现轻量级消息队列(二)
  • 使用 ROS2 构建客户端-服务器通信:一个简单的计算器示例
  • 储能变流器学习之MPPT
  • 汽车盲点检测系统的网络安全分析和设计
  • k8s-容器化部署论坛和商城服务
  • 开源 | 推荐一套企业级开源AI人工智能训练推理平台(数算岛):完整代码包含多租户、分布式训练、模型市场、多框架支持、边缘端适配、云边协同协议:
  • PMP项目管理知识点-⑮预测型项目概念辨析