通過定義過濾器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>

三、小結

        碰到跨域問題時,可以通過自定義過濾器,然后在請求頭上添加參數來解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM