• 通过定义过滤器filter解决跨域问题


            跨域是比较常见问题,比较简单的方式就是直接定义一个过滤器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
            
        }
    
    }

    二、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>

    三、小结

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

  • 相关阅读:
    信息化基础建设 ORM 常见错误
    信息化基础建设 消息引擎
    Enterprise Library:日志的两种需求
    DDD:将概念显式化 之 验证规约
    技术人生:与其鸟宿檐下,不如击翅风雨
    DDD:传统三层架构向DDD的转换
    设计原则:意图导向编程的优点
    Entity Framework:数据库初始化的三种机制
    技术人生:使用价值观、原则和模式来理性的做设计和编程
    技术人生:人的差别在于业余时间
  • 原文地址:https://www.cnblogs.com/zeng1994/p/8778513.html
Copyright © 2020-2023  润新知