1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.filter;
17
18 import java.io.IOException;
19
20 import org.apache.logging.log4j.LogManager;
21 import org.apache.logging.log4j.Logger;
22 import org.codelibs.core.lang.StringUtil;
23 import org.codelibs.fess.cors.CorsHandler;
24 import org.codelibs.fess.cors.CorsHandlerFactory;
25 import org.codelibs.fess.util.ComponentUtil;
26
27 import jakarta.servlet.Filter;
28 import jakarta.servlet.FilterChain;
29 import jakarta.servlet.ServletException;
30 import jakarta.servlet.ServletRequest;
31 import jakarta.servlet.ServletResponse;
32 import jakarta.servlet.http.HttpServletRequest;
33 import jakarta.servlet.http.HttpServletResponse;
34
35
36
37
38
39 public class CorsFilter implements Filter {
40
41
42
43
44 public CorsFilter() {
45
46 }
47
48 private static final Logger logger = LogManager.getLogger(CorsFilter.class);
49
50
51
52
53 protected static final String OPTIONS = "OPTIONS";
54
55 @Override
56 public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
57 throws IOException, ServletException {
58 final HttpServletRequest httpRequest = (HttpServletRequest) request;
59 final String origin = httpRequest.getHeader("Origin");
60 if (StringUtil.isNotBlank(origin)) {
61 if (logger.isDebugEnabled()) {
62 logger.debug("HTTP Request: method={}", httpRequest.getMethod());
63 }
64 final CorsHandlerFactory factory = ComponentUtil.getCorsHandlerFactory();
65 final CorsHandler handler = factory.get(origin);
66 if (handler != null) {
67 handler.process(origin, request, response);
68
69 if (OPTIONS.equals(httpRequest.getMethod())) {
70 final HttpServletResponse httpResponse = (HttpServletResponse) response;
71 httpResponse.setStatus(HttpServletResponse.SC_ACCEPTED);
72 return;
73 }
74 } else if (logger.isDebugEnabled()) {
75 logger.debug("No CorsHandler: origin={}", origin);
76 }
77 }
78
79 chain.doFilter(request, response);
80 }
81
82 }