跨域拦截器
具体:CorsFilter / @CrossOrigin
职责: 处理浏览器的 **CORS协议。它负责在 HTTP 响应头里盖上 Access-Control-Allow-Origin 等印章,告诉浏览器:“这个来源是安全的,允许读取数据。
执行时机: 处于请求链路的最前端。它甚至在请求还没到达你写的 Controller 之前,就先处理浏览器的 OPTIONS 预检请求。
判断依据:仅仅通过请求头中的 Origin 字段进行字符串比对,不涉及任何业务逻辑。
在使用完nginx反向代理后,由于前后端实现了同源,跨域拦截器就完成了自己的使命,不需要了。
业务拦截器
具体:HandlerInterceptor 职责:负责执行具体的 业务安全策略,如
- 检查 Header 里是否带有合法的 Token
- 判断当前用户是否有权访问特定接口
- 记录用户操作轨迹
执行时机:位于 Spring MVC 内部。只有当请求通过了跨域校验、路由匹配成功后,才会进入 Interceptor。
技术特性:可以通过HandlerMethod获取到目标方法上的自定义注解,从而实现灵活的拦截逻辑
与AOP区别:拦截器是全局的、粗粒度控制,而AOP是细粒度,针对特定方法的逻辑增强
总结
请求进入服务器,按以下顺序进行
| 阶段 | 拦截组件 | 关注内容 | 失败后果 |
|---|---|---|---|
| 第一关:安全协议 | CORS 拦截 | 请求头 Origin 是否在白名单? | 浏览器报错,前端拿不到数据 |
| 第二关:业务身份 | 业务拦截器 | 是否登录?是否有 Token? | 返回 401 Unauthorized |
| 第三关:精细控制 | AOP 切面 | IP 频率是否超限?(限流) | 返回 429 Too Many Requests |