文件作用
- 整体定位: 这是 Spring MVC 的全局 Web 配置类,继承
WebMvcConfigurationSupport,用于统一配置静态资源映射、拦截器链以及字符编码过滤器等。 - 主要内容:
addResourceHandlers:配置静态资源与 Swagger 相关资源的访问路径与缓存策略。@Bean:注册三个拦截器 Bean(CommandInterceptor、AdminUserInterceptor、ClientUserInterceptor)和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 行的拦截与放行规则。
1476

被折叠的 条评论
为什么被折叠?



