为了满足部分接口跨域的需求,后来自己写了filter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
public class implements Filter { private static final Logger logger = LoggerFactory.getLogger(CorsFilter.class);
private List<String> origins = Collections.singletonList("http://*.*.com.cn"); private String headers = "Origin, X-Requested-With, Content-Type, Accept"; private String methods = "POST"; private List<String> urls = new Vector<>();
public void init(FilterConfig filterConfig) throws ServletException { String p = filterConfig.getInitParameter("origin"); if (p != null) { origins = Arrays.asList(p.split(",")); } p = filterConfig.getInitParameter("headers"); headers = p == null ? headers : p; p = filterConfig.getInitParameter("methods"); methods = p == null ? methods : p; p = filterConfig.getInitParameter("url"); if (p != null) { urls.addAll(Arrays.asList(p.split(","))); } }
public void doFilter( ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { if (servletRequest instanceof HttpServletRequest) { HttpServletRequest req = (HttpServletRequest) servletRequest; if (!urls.isEmpty() && urls.stream() .anyMatch(url -> Pattern.compile(url).matcher(req.getServletPath()).matches())) { String originHeader = req.getHeader("Origin"); if (origins.contains(originHeader)) { HttpServletResponse httpResponse = (HttpServletResponse) servletResponse; httpResponse.addHeader("Access-Control-Allow-Origin", originHeader); httpResponse.setHeader("Access-Control-Allow-Headers", headers); httpResponse.setHeader("Access-Control-Allow-Methods", methods); } } } filterChain.doFilter(servletRequest, servletResponse); }
public void destroy() {} }
|
近期评论