使用过滤器跨域问题

本文涉及的产品
.cn 域名,1个 12个月
简介: 使用过滤器跨域问题

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

关于跨域有很多种解决方法,这里我使用过滤器来解决跨域的问题。我们使用了一个过滤器(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");
    }
}


目录
相关文章
|
前端开发 中间件
ThinkPHP6.0处理前端请求跨域问题AllowCrossDomain
ThinkPHP6.0处理前端请求跨域问题AllowCrossDomain
414 0
|
1月前
|
XML 前端开发 JavaScript
JavaEE:http请求 | 过滤器 | 同步与异步请求 | 跨域问题 | axios框架 有这一篇就够!
JavaEE:http请求 | 过滤器 | 同步与异步请求 | 跨域问题 | axios框架 有这一篇就够!
|
9月前
|
前端开发 Java 应用服务中间件
拦截器解决跨域问题
拦截器解决跨域问题
49 0
|
JavaScript 前端开发 中间件
前端解决跨域问题(9个方法)
前端解决跨域问题(9个方法)
1404 0
|
Java 应用服务中间件 网络架构
REST风格下如何放行静态资源
REST风格下如何放行静态资源
|
JSON Android开发 数据格式
|
Web App开发 JSON 前端开发
跨域问题总结
跨域问题总结
993 0
跨域问题总结
|
前端开发
thymeleaf实现ajax请求的两种方式
thymeleaf实现ajax请求的两种方式
|
开发框架 Java 应用服务中间件
【过滤器入门】学会使用过滤器,为你的web项目添砖加瓦
到这里我们对Java Web的学习也到尾声了,本专栏关于Java Web的知识也是非常全的。
【过滤器入门】学会使用过滤器,为你的web项目添砖加瓦