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