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); } } }