使用过滤器跨域问题

简介: 使用过滤器跨域问题

跨域是指在浏览器中,当前网页向不同域名(或不同端口、不同协议)的接口发送请求时,浏览器会拦截这些请求,防止跨域攻击。为了解决跨域问题,需要在服务器端添加一些响应头信息,告诉浏览器允许跨域访问。

关于跨域有很多种解决方法,这里我使用过滤器来解决跨域的问题。我们使用了一个过滤器(CorsFilter)来处理跨域请求。在过滤器中,我们先通过request.getHeader("Origin")获取请求中的Origin头信息,即客户端的域名。然后将该域名添加到响应头的Access-Control-Allow-Origin字段中,告诉浏览器允许来自该域名的请求。

同时,我们还添加了Access-Control-Allow-Methods字段,指定了允许的请求方法,包括GET、HEAD、POST、PUT和DELETE。这样就可以满足大部分常见的请求方法。

最后,我们还添加了Access-Control-Allow-Headers字段,指定了允许的请求头。这个字段是可选的,根据实际情况确定需要允许的请求头。在这个示例中,我们允许了Authorization和Content-Type两个常见的请求头。

注意:我们的过滤器要在security过滤器链之前进行过滤,节省资源,所以order要小于Spring Security中的过滤器链的order,我这里是-101,Spring Security中的过滤器链默认是100,较低的值表示较高的优先级,较高的值表示较低的优先级。

通过以上的设置,我们就可以在服务器端解决跨域问题,允许来自指定域名的请求访问接口。

/**
 * @author jinze
 * @version 1.0
 * @description: 跨域过滤器
 * @date 2023/8/14 15:55
 */
@Component
@Order(Const.ORDER_CORS)
public class CorsFilter extends HttpFilter {
    @Override
    protected void doFilter(HttpServletRequest request,
                            HttpServletResponse response,
                            FilterChain chain) throws IOException, ServletException {
        this.addCorsHeader(request, response); // 添加跨域头信息
        chain.doFilter(request, response); // 继续处理请求
    }
    /**
     * 添加跨域头信息
     */
    private void addCorsHeader(HttpServletRequest request,
                               HttpServletResponse response) {
        // 允许哪个域名进行跨域访问
        response.addHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        // 允许的请求方法
        response.addHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE");
        // 允许的请求头
        response.addHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
    }
}


目录
相关文章
|
Java Spring
springboot跨域配置
springboot跨域配置
775 0
|
Java 容器
如何在SpringBoot项目中使用过滤器和拦截器
过滤器和拦截器是日常开发中常用技术,用于对特定请求进行增强处理,如插入自定义代码以实现特定功能。过滤器在请求到达 `servlet` 前执行,而拦截器在请求到达 `servlet` 后执行。`SpringBoot` 中的拦截器依赖于 `SpringBoot` 容器,过滤器则由 `servlet` 提供。通过实现 `Filter` 接口并重写 `doFilter()` 方法可实现过滤器;通过实现 `HandlerInterceptor` 接口并重写相应方法可实现拦截器。两者的主要区别在于执行时机的不同,需根据具体场景选择使用。
1124 4
如何在SpringBoot项目中使用过滤器和拦截器
|
算法 Java 数据安全/隐私保护
java MD5 32位加密
java MD5 32位加密
546 0
|
6月前
|
SQL 关系型数据库 MySQL
击穿 MySQL InnoDB MVCC 底层:从 undo log、Read View 到隔离级别的全链路深度拆解
本文深入解析MySQL InnoDB的MVCC机制,涵盖undo log版本链、Read View可见性规则、各隔离级别行为差异,并纠正脏读/幻读等常见误区,辅以SQL与Spring Boot实战演示,助你透彻理解高并发下数据一致性的底层原理。
451 3
|
7月前
|
存储 SQL 关系型数据库
MySQL 索引底层彻底吃透:B + 树原理、聚簇索引机制与全场景优化指南
本文深入剖析MySQL InnoDB索引底层原理:从B+树为何成为最优选,到聚簇/二级索引机制、回表与覆盖索引;详解最左前缀、索引失效10大场景及根因;并给出分页优化、联合索引设计、ICP等生产级实战方案,助你真正知其所以然。
704 2
|
10月前
|
IDE 开发工具
IntelliJ IDEA 安装 pmd-idea-1.9.0.zip 插件详细教程
PMD-IDEA 是基于 PMD 的 IntelliJ IDEA 代码检查插件,支持静态代码分析,帮助发现潜在问题。下载 zip 包后,通过 Settings → Plugins → Install from Disk 安装,重启 IDEA 即可使用。可右键文件或项目运行扫描,结果在底部面板展示,支持自定义规则与扫描范围,提升代码质量。
HTTP协议中常见的状态码 ?
HTTP协议状态码分为1xx、2xx、3xx、4xx、5xx五类。常见状态码包括:101(切换协议)、200(请求成功)、302(重定向)、401(未认证)、404(资源未找到)、500(服务器错误)。
1156 0
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。
1220 0
|
网络协议 算法 网络性能优化
【TCP】核心机制:滑动窗口、流量控制和拥塞控制
【TCP】核心机制:滑动窗口、流量控制和拥塞控制
676 2
|
Java Spring 开发框架
Spring Boot中的分页与排序实现
Spring Boot中的分页与排序实现

热门文章

最新文章