WebConfig的登录与放行
文件作用
- 整体定位: 这是 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 行的拦截与放行规则。