rest

为了满足部分接口跨域的需求,后来自己写了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

* @author dumas
* @date 2018/8/16
*/
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() {}
}