使用过滤器进行跨域

项目图

 

第一步:

创建好过滤器后有两种方式获取跨域限制内容

方式一:在web中配置好param-name,直接获取param-value

package com.wbg.test01;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter(filterName = "CorsFilter")
public class CorsFilter implements Filter {
    String[] originAll = null;

    @Override
    public void init(FilterConfig config) throws ServletException {
        String origin=config.getInitParameter("origin");
        if(origin!=null && !origin.isEmpty()){
            originAll = origin.split(",");
        }
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        String origin = request.getHeader("Origin");
        if (origin != null && !origin.isEmpty()){
            for (String originAlls : originAll) {
                    if(originAlls.equals("*")||originAlls.equals(origin)){
                        response.setHeader("Access-Control-Allow-Origin",origin);
                    }
            }
        }
            chain.doFilter(req, resp);
    }

    public void destroy() {
    }
}
View Code

方式二:使用配置文件获取

 首先创建好配置文件

origin=http://localhost:7070, http://localhost:8080, http://localhost:9090

然后进行获取即可

package com.wbg.test01;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

@WebFilter(filterName = "CorsFilter")
public class CorsFilter implements Filter {
    String[] originAll = null;

    @Override
    public void init(FilterConfig config) throws ServletException {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        //new一个读取配置文件
        Properties properties=new Properties();
        //获取文件路径
        String path=request.getServletContext().getRealPath("/dom.properties");
        //读取文件内容
        properties.load(new FileInputStream(path));
        //获取origin的value
        String originValue=properties.getProperty("origin");
        if(originValue!=null && !originValue.isEmpty()){
            originAll = originValue.split(",");
        }
       String origin = request.getHeader("Origin");
        if (origin != null && !origin.isEmpty()){
            for (String originAlls : originAll) {
                    if(originAlls.equals("*")||originAlls.equals(origin)){
                        response.setHeader("Access-Control-Allow-Origin",origin);
                    }
            }
        }
            chain.doFilter(req, resp);
    }

    public void destroy() {
    }
}
View Code

第二步:创建servlet

package com.wbg.test01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/OriginServlet")
public class OriginServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter writer=response.getWriter();
        writer.write("hello,word!");
    }
}
View Code

第三步:配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--定义过滤器-->
    <filter>
        <!--定义过滤器拦截URL地址-->
        <filter-name>corsFilter</filter-name>
        <!--过滤器的文件-->
        <filter-class>com.wbg.test01.CorsFilter</filter-class>
        <!--在过滤文件中FilterConfig.getInitParameter(param-name)获取param-value-->
        <init-param>
           <!-- 名称key-->
            <param-name>origin</param-name>
            <!-- 定义value值-->
          <param-value>http://localhost:7070, http://localhost:8080, http://localhost:9090</param-value>
            <!-- 所有请求-->
            <!--  <param-value>*</param-value>-->
        </init-param>
    </filter>
    <filter-mapping>
        <!--过滤器的名称-->
        <filter-name>corsFilter</filter-name>
        <!--过滤器负责拦截的URL-->
        <!-- /* 会把所有的请求拦截下来 -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
View Code

 demo:https://github.com/weibanggang/CorsFilter.git

posted @ 2018-11-27 12:15  韦邦杠  阅读(975)  评论(0编辑  收藏  举报