网上很多解决跨域拦截的案例:我这里也是自己鼓捣之后才解决的,仅供借鉴,酌情拷贝。
1、对请求和响应进行重写
/** * author: CHY * touse: 解决浏览器跨域问题(拦截器) * * response.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); */ public class httpFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; HttpServletResponse rep = (HttpServletResponse) servletResponse; //设置允许跨域的配置 // 这里填写你允许进行跨域的主机ip(正式上线时可以动态配置具体允许的域名和IP) rep.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin")); rep.setHeader("Access-Control-Allow-Origin", "*"); // 允许的访问方法 rep.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH"); // Access-Control-Max-Age 用于 CORS 相关配置的缓存 rep.setHeader("Access-Control-Max-Age", "3600"); rep.setHeader("Access-Control-Allow-Headers", "token,Origin, X-Requested-With, Content-Type, Accept"); servletResponse.setCharacterEncoding("UTF-8"); servletResponse.setContentType("application/json; charset=utf-8"); String token = req.getHeader("token");//header方式 //ResultInfo resultInfo = new ResultInfo(); boolean isFilter = false; String method = ((HttpServletRequest) servletRequest).getMethod(); rep.setStatus(HttpServletResponse.SC_OK); filterChain.doFilter(servletRequest, servletResponse); } @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void destroy() { } }
public class ResponseWrapper extends HttpServletResponseWrapper { private ByteArrayOutputStream buffer; private ServletOutputStream out; public ResponseWrapper(HttpServletResponse httpServletResponse) { super(httpServletResponse); buffer = new ByteArrayOutputStream(); out = new WrapperOutputStream(buffer); } @Override public ServletOutputStream getOutputStream() throws IOException { return out; } @Override public void flushBuffer() throws IOException { if (out != null) { out.flush(); } } public byte[] getContent() throws IOException { flushBuffer(); return buffer.toByteArray(); } class WrapperOutputStream extends ServletOutputStream { private ByteArrayOutputStream bos; public WrapperOutputStream(ByteArrayOutputStream bos) { this.bos = bos; } @Override public void write(int b) throws IOException { bos.write(b); } @Override public boolean isReady() { return false; } @Override public void setWriteListener(WriteListener writeListener) { } } }
2、启动项添加过滤器加载
@Bean public FilterRegistrationBean someFilterRegistration(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new httpFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.addInitParameter("paramName","paramValue"); registrationBean.setName("httpFilter"); return registrationBean; }