Java设置接口跨域

现在我们很多项目都是基于Java的REST结构风格前后端分离,在前端访问后端的时候就存在跨域,这个时候后端接口不处理就会存在访问不了。上代码!

  1、创建一个Filter 在web.xml中配置

<filter>
        <filter-name>xssAndSqlFilter</filter-name>
        <filter-class>com.tzdr.btc.user.filter.XssAndSqlFilter</filter-class>
        <!--过滤掉 静态资源文件 指定字符串  多个值用英文逗号隔开-->
        <init-param>
            <param-name>excludedPages</param-name>
            <param-value>/tesra/</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>xssAndSqlFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

2、在Filter的doFiler方法中添加设置

@Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        boolean isExcludedPage = Boolean.TRUE;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        HttpServletRequest request1 = (HttpServletRequest) request;
        //*表示允许所有域名跨域
        httpResponse.setHeader("Access-Control-Allow-Origin", request1.getHeader("Origin"));
        httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        httpResponse.setHeader("Access-Control-Max-Age", "0");
        httpResponse.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token,Access-Control-Allow-Headers");
        httpResponse.setHeader("Access-Control-Allow-Credentials", "true");//这个是设置运行携带cookie
        httpResponse.setHeader("XDomainRequestAllowed","1");
        //判断是否在过滤url之外
        for (String page : excludedPageArray) {
            if(((HttpServletRequest) request).getServletPath().contains(page)){
                isExcludedPage = Boolean.FALSE;
                break;
            }
        }
        //在过滤url之外
        if (isExcludedPage) {
            XssAndSqlHttpServletRequestWrapper xssRequest = new XssAndSqlHttpServletRequestWrapper((HttpServletRequest) request);
            chain.doFilter(xssRequest, response);
        }
        else{
            chain.doFilter(request, response);
        }
    }

这样完成以后 再访问接口就能成功访问了。

QQ群号:216868740

原文地址:https://www.cnblogs.com/tangyin/p/9934885.html

时间: 2024-08-30 11:20:28

Java设置接口跨域的相关文章

nodejs设置允许跨域

//设置服务器跨域权限app.use(function (req, res, next) {    res.header("Access-Control-Allow-Origin", "*");    res.header("Access-Control-Allow-Headers", "X-Requested-With");    res.header("Access-Control-Allow-Methods&q

java SSM 解决跨域问题

什么是跨域 跨域是指从一个域名的网页去请求另一个域名的资源.比如从www.baidu.com 页面去请求 www.google.com 的资源.跨域的严格一点的定义是:只要 协议,域名,端口有任何一个的不同,就被当作是跨域 前段时间接触一个新的项目,原本想着做成前后端分离的,但是这样就会涉及到 ajax 跨域的问题,那时候没解决,所以就没搞前后端分离,但是今天的项目又接触到跨域(前后端分离的问题),研究了一晚上,查了很多资料,也跟一些前辈沟通过,用的方法都不同, 有人说用谷歌的插件,有人说用Ng

axios解决调用后端接口跨域问题

vue-cli通过是本地代理的方式解决接口跨域问题的.但是在vue-cli的默认项目配置中这个代理是没有配置的,如果现在项目中使用,必须手动配置config/index.js文件 ... proxyTable: { '/api': { //将www.exaple.com印射为/apis target: 'https://www.example.com, // 接口域名 secure: true, // 如果是https接口,需要配置这个参数 changeOrigin: true, //是否跨域

express设置允许跨域访问该服务.

const express = require('express');const app = express(); //设置允许跨域访问该服务.app.all('*', function (req, res, next) { res.header('Access-Control-Allow-Origin', '*'); //Access-Control-Allow-Headers ,可根据浏览器的F12查看,把对应的粘贴在这里就行 res.header('Access-Control-Allow

asp.net设置允许跨域

String origin = filterContext.HttpContext.Request.Headers["Origin"]; filterContext.HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");//设置允许跨域 filterContext.HttpContext.Response.AppendHeader("Access-Co

vue proxyTable 接口跨域请求调试(五)

在不同域之间访问是比较常见,在本地调试访问远程服务器....这就是有域问题. VUE解决通过proxyTable: 在 config/index.js 配置文件中 dev: { env: require('./dev.env'), port: 8080, autoOpenBrowser: true, assetsSubDirectory: 'static', assetsPublicPath: '/', //proxyTable: {}, proxyTable: proxyConfig.prox

vue-cli设置proxyTable 跨域

跨域问题很常见,至于为什么有跨域就不说了.记录一下在vue-cli中设置跨域 这里只需要前端设置 ,然后就可以进行跨域访问啦 在脚手架中 config的文件夹下面有一个index.js 打开找到proxyTable ,发现是一个空对象.这个单词的意思是代理 .那么我们可以理解为 通过这个代理发出请求,映射到相同的域名端口号下,然后实现跨域的访问. 那么怎么设置呢? proxyTable: { '/api/':{ target:'http://210.16.188.194:8090', chang

Java实现CORS跨域请求

问题 使用前后端分离模式开发项目时,往往会遇到这样一个问题 -- 无法跨域获取服务端数据 这是由于浏览器的同源策略导致的,目的是为了安全.在前后端分离开发模式备受青睐的今天,前端和后台项目往往会在不同的环境下进行开发,这时就会出现跨域请求数据的需求,目前的解决方案主要有以下几种: JSONP.iframe.代理模式.CORS等等 前面几种方式在这里不讲,网上有很多资料.在这里我主要分享一下CORS这种解决方式,CORS即"跨域资源共享",它允许浏览器向跨源服务器,发出XMLHttpRe

JAVA web项目跨域

CORS跨域请求控制方法 1.http请求头 Origin: 普通的HTTP请求也会带有,在CORS中专门作为Origin信息供后端比对,表明来源域. Access-Control-Request-Method: 接下来请求的方法,例如PUT, DELETE等等 Access-Control-Request-Headers: 自定义的头部,所有用setRequestHeader方法设置的头部都将会以逗号隔开的形式包含在这个头中 2.http响应头 然后浏览器再根据服务器的返回值判断是否发送非简单