最近在研究layui做前端,不过我喜欢吧资源放在服务器上,这样在写别的项目的时候就不用拷贝资源到上面中去了,资源服务器我写了一个简单的javaweb项目放在tomcat上
但在做字符资源获取的时候,leyui 上写着
**由于浏览器存在同源策略,所以如果layui(里面含图标字体文件)所在的地址与你当前的页面地址不在同一个域下,即会出现图标跨域问题。所以要么你就把Layui与网站放在同一服务器,要么就对Layui所在的资源服务器的Response Headers加上属性:Access-Control-Allow-Origin: *.**
解决方法: 编写javaweb 过滤器,指针对于某一个项目,我喜欢这种方式,不喜欢在服务器上配置
CorsFilter.java
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;
/**
* 跨域资源控制
* @author johnny
* @date 2017年4月18日 下午10:07:13
* @Description:
*/
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
res.setContentType("text/html;charset=UTF-8");
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
res.setHeader("Access-Control-Max-Age", "0");
res.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");
res.setHeader("Access-Control-Allow-Credentials", "true");
res.setHeader("XDomainRequestAllowed", "1");
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
web.xml 配置
<filter>
<filter-name>cors</filter-name>
<filter-class>com.xxxx.core.filter.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
ok,
是不是很简单