美文网首页java学习
java跨域过滤器

java跨域过滤器

作者: Mrhy1996 | 来源:发表于2019-10-10 17:18 被阅读0次

环境描述

前端:angular
后台:springboot

问题

前端调用后台接口出现跨域的问题,具体内容笔者没有截图,如果出现问题在网站页面的console中可以看到

解决

后台新建一个类,添加过滤器

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter(filterName = "cors", urlPatterns = "/*")
public class CORSFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;
        System.out.println(request.getHeaderNames());
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,token");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        chain.doFilter(req, res);
    }

    @Override
    public void destroy() {

    }
}

再试试前台访问,看看是否还会出现跨域问题。

----------------------------------10.26更新---------------------------------------------

笔者在开发过程中碰到了灵异现象,用post方式调用,且接收参数为@RequestBody的时候,这个方法就会跨域,其他的调用方式不跨域,经过查阅资料,更新上面的代码如下

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter(filterName = "cors", urlPatterns = "/*")
public class CORSFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;
        System.out.println(request.getHeaderNames());
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,token");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        if ("OPTIONS".equals(request.getMethod())) {
            res.getWriter().println("ok");
            return;
        }
        chain.doFilter(req, res);
    }

    @Override
    public void destroy() {

    }
}

相关文章

  • 新增-后端跨域

    前端程序 后端程序 现在请求无法,到达需要解决跨域问题 每个servlet单独做跨域设置 跨域过滤器

  • java跨域过滤器

    环境描述 前端:angular后台:springboot 问题 前端调用后台接口出现跨域的问题,具体内容笔者没有截...

  • 浏览器跨域的那些事

    整理中 目标: 了解跨域 解决跨域 服务器配置跨域(java, nginx) 前端调试时配置解决跨域 一、什么是跨...

  • Java跨域问题以及如何使用Cors解决前后端 分离部署项目所遇

    Java跨域问题以及如何使用Cors解决前后端 分离部署项目所遇到的跨域问题 什么是跨域 跨域,指的是浏览器不能执...

  • 服务器端

    跨域问题的解决 重点就是java端的RESTful API 加上CrossOrigin,允许跨域。

  • CORS跨域请求:前后端分离

    请求过滤器: web.xml中配置跨域过滤器: 过滤器中的属性配置如下: 由于jsonp只支持GET方式的请求,所...

  • 跨域访问

    参考文献:jsonp解决跨域问题 . cors解决跨域问题 . (java+前端小白)第一次碰到跨域问题,小伙伴们...

  • spring boot + VUE跨域处理

    在使用 vue 做前端开发时,碰到 vue 请求接口出现跨域问题。解决的方法,就在后台添加一个跨域请求的过滤器,来...

  • 知识 | 跨域问题

    java 浅析跨域问题以及如何使用Cors解决前后端分离部署项目所遇到的跨域问题

  • Spring Boot+AngularJS跨域及sessionI

    java后台跨域配置 增加一个跨域配置类,如下 存在的问题 服务端id request.getSession()....

网友评论

    本文标题:java跨域过滤器

    本文链接:https://www.haomeiwen.com/subject/leyapctx.html