package foundation.route; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import foundation.handler.DataPool; import foundation.handler.IHandler; import foundation.log.ILogWriter; import foundation.log.LogCategory; import foundation.log.LogConfig; public class ControllerNavigator extends RouteNavigator { private static Logger logger; private Operation operation; static { logger = LogManager.getLogger(ControllerNavigator.class); } public ControllerNavigator(HttpServletRequest request, String uri, String path, Operation operation, Route route, boolean authorizeSensitive) { super(request, uri, path, route, authorizeSensitive); this.operation = operation; } @Override public void sendTo(HttpServletResponse response, Object... args) { if (LogConfig.IsActive_ControllerNavigator) { logger.debug(uri); } IHandler handler; try { //1. replay options request String method = request.getMethod(); if (("OPTIONS").equalsIgnoreCase(method)) { replyOptions(request, response); return; } //2. set cross headers setCrossAccessHeaders(response); //3. send to controller DataPool dataPool = (DataPool)args[0]; if (dataPool == null) { dataPool = new DataPool(request); } dataPool.setOperation(operation); handler = ((ControllerRoute) route).getToObject(); ILogWriter.write(LogCategory.Data, path); handler.receive(operation, dataPool, response); } catch (Exception e) { e.printStackTrace(); } } public static void replyOptions(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Origin, Content-Type, Accept, Authorization"); response.setHeader("access-control-expose-headers", "Authorization"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("mode", "no-corred"); response.setStatus(200); response.flushBuffer(); } private void setCrossAccessHeaders(HttpServletResponse response) { response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); response.setHeader("Access-Control-Max-Age", "0"); response.setHeader("Cache-Control","no-cache"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("XDomainRequestAllowed","1"); response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With, Accept, Authorization"); response.setHeader("access-control-expose-headers", "Authorization"); } public Operation getOperation() { return operation; } }