跨域是比较常见问题,比较简单的方式就是直接定义一个过滤器filter,然后在请求头里面加上一些参数。下面来看看具体的写法吧。

一、java代码

package com.hj.userapi.core.filter;

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.http.HttpServletResponse; /**
* 功能描述:解决跨域过滤器
* 2017年9月4日
*/
public class ContextFilter implements Filter{
private final int time = 20*24*60*60;
/**
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub } /**
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletResponse resp = (HttpServletResponse) response;
// 添加参数,允许任意domain访问
resp.setHeader("Access-Control-Allow-Origin", "*");
// 这个allow-headers要配为*,这样才能允许所有的请求头 --- update by zxy in 2018-10-19
resp.setHeader("Access-Control-Allow-Headers", "*");
resp.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
resp.setHeader("Access-Control-Max-Age", time+"");
chain.doFilter(request, resp);
} /**
* @see javax.servlet.Filter#destroy()
*/
@Override
public void destroy() {
// TODO Auto-generated method stub } }
x
 
1
package com.hj.userapi.core.filter;
2

3
import java.io.IOException;
4
import javax.servlet.Filter;
5
import javax.servlet.FilterChain;
6
import javax.servlet.FilterConfig;
7
import javax.servlet.ServletException;
8
import javax.servlet.ServletRequest;
9
import javax.servlet.ServletResponse;
10
import javax.servlet.http.HttpServletResponse;
11

12
/**
13
 * 功能描述:解决跨域过滤器 
14
 * 2017年9月4日
15
 */
16
public class ContextFilter implements Filter{
17
    private final int time = 20*24*60*60;
18
    /**
19
     * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
20
     */
21
    @Override
22
    public void init(FilterConfig filterConfig) throws ServletException {
23
        // TODO Auto-generated method stub
24
        
25
    }
26

27
    /**
28
     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
29
     */
30
    @Override
31
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
32
        HttpServletResponse resp = (HttpServletResponse) response;
33
        // 添加参数,允许任意domain访问
34
        resp.setHeader("Access-Control-Allow-Origin", "*");
35
        // 这个allow-headers要配为*,这样才能允许所有的请求头 --- update by zxy  in 2018-10-19
36
        resp.setHeader("Access-Control-Allow-Headers", "*");
37
        resp.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
38
        resp.setHeader("Access-Control-Max-Age", time+"");
39
        chain.doFilter(request, resp);
40
    }
41

42
    /**
43
     * @see javax.servlet.Filter#destroy()
44
     */
45
    @Override
46
    public void destroy() {
47
        // TODO Auto-generated method stub
48
        
49
    }
50

51
}

二、web.xml中的配置

	<filter>
<filter-name>contextFilter</filter-name>
<filter-class>com.hj.userapi.core.filter.ContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>contextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
 
1
    <filter>
2
        <filter-name>contextFilter</filter-name>
3
        <filter-class>com.hj.userapi.core.filter.ContextFilter</filter-class>
4
    </filter>
5
    <filter-mapping>
6
        <filter-name>contextFilter</filter-name>
7
        <url-pattern>/*</url-pattern>
8
    </filter-mapping>

三、小结

        碰到跨域问题时,可以通过自定义过滤器,然后在请求头上添加参数来解决。

通过定义过滤器filter解决跨域问题的更多相关文章

  1. 利用Filter解决跨域请求的问题

    1.为什么出现跨域. 很简单的一句解释,A系统中使用ajax调用B系统中的接口,此时就是一个典型的跨域问题,此时浏览器会出现以下错误信息,此处使用的是chrome浏览器. 错误信息如下: jquery ...

  2. 服务网关ZuulFilter过滤器--如何解决跨域请求中的OPTIONS请求

    进行跨域请求的时候,并且请求头中有额外参数,比如token,客户端会先发送一个OPTIONS请求 来探测后续需要发起的跨域POST请求是否安全可接受 所以这个请求就不需要拦截,下面是处理方式 @Ove ...

  3. springboot解决跨域问题(Cors)

    1.对于前后端分离的项目来说,如果前端项目与后端项目部署在两个不同的域下,那么势必会引起跨域问题的出现. 针对跨域问题,我们可能第一个想到的解决方案就是jsonp,并且以前处理跨域问题我基本也是这么处 ...

  4. 14 微服务电商【黑马乐优商城】:day06-使用nginx反向代理并掌握cors解决跨域

    本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...

  5. JAVA | Java 解决跨域问题

    JAVA | Java 解决跨域问题 Table of Contents 引言 什么是跨域(CORS) 什么情况会跨域 解决方案 前端解决方案 后端解决方案 具体方式 一.使用Filter方式进行设置 ...

  6. spring @CrossOrigin解决跨域问题

    阅读目录: 一.跨域(CORS)支持: 二.使用方法: 1.controller配置CORS 2.全局CORS配置 3.XML命名空间 4.How does it work? 5.基于过滤器的CORS ...

  7. 注解@CrossOrigin解决跨域问题

    注解@CrossOrigin 出于安全原因,浏览器禁止Ajax调用驻留在当前原点之外的资源.例如,当你在一个标签中检查你的银行账户时,你可以在另一个选项卡上拥有EVILL网站.来自EVILL的脚本不能 ...

  8. Axiso解决跨域访问(...XMLHttpRequest cannot load http://xxx.xxx No 'Access-Control-Allow-Origin'...)

    直接访问如下:this.$axios.get("http://localhost:8089/yc/demo").then(res=>{    console.log(res) ...

  9. Spring @CrossOrigin 通配符 解决跨域问题

    @CrossOrigin 通配符 解决跨域问题 痛点: 对很多api接口需要 开放H5 Ajax跨域请求支持 由于环境多套域名不同,而CrossOrigin 原生只支持* 或者具体域名的跨域支持 所以 ...

随机推荐

  1. Vue + Spring Boot从零开始搭建个人网站(一) 之 项目前端Vue.js环境搭建

    前言: 最近在考虑搭建个人网站,想了想决定采用前后端分离模式 前端使用Vue,负责接收数据 后端使用Spring Boot,负责提供前端需要的API 就这样开启了我边学习边实践之旅 Vue环境搭建步骤 ...

  2. 安卓逆向(一)--Smali基础

    安卓逆向(一)--Smali基础 标签(空格分隔): 安卓逆向 APK的组成 文件夹 作用 asset文件夹 资源目录1:asset和res都是资源目录但有所区别,见下面说明 lib文件夹 so库存放 ...

  3. Android IOC注解库EasyUI

    EasyUI介绍 1.使用反射机制和注解实现类似于butterknife的IOC框架 2.快速的findViewById和OnClick 3.扩展了click时无网络监测 4.扩展了快速点击监测 使用 ...

  4. C++二进制输入输出流接口设计

    提到输入输出流,作为CPPer很自然的就会想到std::iostream,对于文本流的处理,iostream可以说足够强大,应付一般复杂度的需求毫无压力.对二进制流处理却只能用“简陋”来形容,悲催的是 ...

  5. windows 服务器远程桌面 你的凭据不工作

    一.问题描述   通过windows 远程桌面连接服务器时,输入正确的用户名和密码,点击连接按钮时,提示“你的凭据不工作”,但是其他个别电脑可以通过远程桌面远程到目标服务器.问题描述如下图所示: 二. ...

  6. Prometheus Node_exporter 之 Memory Detail Meminfo /proc/meminfo

    1. Memory Active / Inactive type: GraphUnit: bytesLabel: BytesInactive - 最近使用较少的内存, 优先被回收利用 /proc/me ...

  7. Oracle EBS AP 供应商API

    --创建供应商地址上的电话号码 created by jenrry 20170419 DECLARE l_return_status VARCHAR2(1); l_msg_count NUMBER; ...

  8. MySQL crash-safe replication(2):

    MySQL数据库的成功离不开其replicaiton(复制),相对于Oracle DG和Microsoft SQL Server Log Shipping来说,其简单易上手,基本上1,2分钟内根据手册 ...

  9. Python socket应用

    Server端: #-*- coding: UTF-8 -*- import socket,time host='192.168.0.9' port=12307 s=socket.socket(soc ...

  10. angular、jquery、vue 的区别与联系

    angular和jquery的区别 angular中是尽量避免操作DOM, angular是基于数据驱动, 适合做数据操作比较繁琐的项目,angular适用于单页面开发,是一个比较完善的mvvm框架, ...