TangCheng
2025-02-28 d787e447e95c7b897c2cc9c0e832f8d2e5084934
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package com.smtaiserver.smtaiserver.web;
 
import java.io.IOException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
 
import com.smtservlet.core.SMTRequest;
import com.smtservlet.util.SMTJsonWriter;
import com.smtservlet.util.SMTStatic;
 
 
 
public class SMTAIServerWebFilter implements Filter {
 
    static Logger _logger = LogManager.getLogger(SMTAIServerWebFilter.class);
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException 
    {
        try
        {
            String Origin = ((HttpServletRequest)servletRequest).getHeader("Origin");
            HttpServletResponse resp = (HttpServletResponse)servletResponse;
            resp.addHeader("Access-Control-Allow-Origin", SMTStatic.isNullOrEmpty(Origin) ? "*" : Origin);
            resp.addHeader("Access-Control-Allow-Credentials", "true");
            resp.addHeader("Access-Control-Allow-Headers", System.getProperty("smt_http_allow_headers", "hswatersession,referrer-policy,content-type,authorization"));
            resp.setContentType("application/json;charset=utf-8");
            //resp.setHeader("Pragma","No-cache");
            //resp.setHeader("Cache-Control","no-cache");
            //resp.setDateHeader("Expires", 0);
            HttpServletRequest request = (HttpServletRequest)servletRequest;
            
            String swaggerUIFlag = System.getProperty("swagger_ui", "true");
            if(swaggerUIFlag == null)
                swaggerUIFlag = "";
            if(!"true".equals(swaggerUIFlag))
            {
                String servPath = request.getRequestURI();
 
                if(servPath.equals("/swagger-ui.html") || servPath.startsWith("/webjars/") || 
                  servPath.startsWith("/swagger-raw.html") || servPath.equals("/swagger-resources/configuration/security"))
                {
                    resp.setStatus(404);
                    resp.setContentType("text/plain;charset=utf-8");
                    ServletOutputStream os = resp.getOutputStream();
                    os.println("404 : swagger_ui=[" + swaggerUIFlag + "]");
                    os.flush();
                    return;
                }
            }
            filterChain.doFilter(servletRequest,servletResponse);
 
        }
        catch(Exception ex)
        {
            Throwable realEX = ex.getCause();
            if(realEX == null)
                realEX = ex;
            
            _logger.fatal("doFilter exception", realEX);
            
            ServletOutputStream os = servletResponse.getOutputStream();
            try
            {
                SMTJsonWriter jsonWr = new SMTJsonWriter(false);
                jsonWr.addKeyValue("json_ok", false);
                jsonWr.addKeyValue("json_msg", realEX.getMessage());
                jsonWr.addKeyValue("json_error", realEX.getMessage());
                os.write(jsonWr.getFullJson().getBytes("UTF-8"));
            }
            finally
            {
                os.close();
            }
        }
        finally
        {
            SMTRequest.destroyInstance((HttpServletRequest)servletRequest);
        }
    }
 
}