我在学习做项目时,做头疼的就是将前端项目和后端项目混合一块做,因为保证两个项目是在同一个域名下,而现实是两个项目分离出来,需要实现某一个端进行跨域操作,通过上网看看其他牛人的讲解以及结合自身体会,特意做一个相对合理的解决方案,以便备份,其实原理相对来说应该是简单一些
1.首先创建一个拦截器,拦截器名称随意去起,代码如下所示:
package com.baidu.lmj.util;
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;
/**
* Servlet Filter implementation class MyCORSFilter
*/
//MyCORSFilter为拦截器名称,一般在创建一个拦截器时就会自动组配
public class MyCORSFilter implements Filter {
/**
* Default constructor.
*/
public MyCORSFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
//一般开发工具默认产生模板代码,在这里需要添加相关的跨域参数
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletResponse response = (HttpServletResponse) servletResponse;
String origin = (String) servletRequest.getRemoteHost() + ":" + servletRequest.getRemotePort();
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization");
response.setHeader("Access-Control-Allow-Credentials", "true");
chain.doFilter(servletRequest, servletResponse);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
2.在需要在web.xml中进行配置相关参数,其中以下参数是自动配置,代码如下所示:
<filter>
<display-name>MyCORSFilter</display-name>
<filter-name>MyCORSFilter</filter-name>
<filter-class>com.baidu.lmj.util.MyCORSFilter</filter-class>
</filter>
而以下参数是手动配置,请看代码并且需要注意以下几点
<filter-mapping>
<filter-name>MyCORSFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(1)filter-name与上面的display-name名称保持一致
(2)url-pattern需要指定一个域名,如果无法判断需要将指定域名判定为/*,就是所有的域名都能够被访问。