X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FNodeHttp.java;h=f88ba678989f3d7261374c7d79ee9d02f39d3942;hb=7bc9403c96bbae11358978358cc902e3f2c6e508;hp=5e1f39acb1f7a57d0651a0976a5c0cc786a781a1;hpb=86db10fcb2299ebf71d5599a80dc54444b26f893;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java index 5e1f39acb..f88ba6789 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeHttp.java @@ -6,6 +6,7 @@ import java.util.Enumeration; import javax.servlet.FilterChain; import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @@ -20,23 +21,23 @@ import org.eclipse.equinox.http.servlet.ExtendedHttpService; * Intercepts and enriches http access, mainly focusing on security and * transactionality. */ -@Deprecated class NodeHttp implements KernelConstants, ArgeoJcrConstants { private final static Log log = LogFactory.getLog(NodeHttp.class); // Filters - private final RootFilter rootFilter; + // private final RootFilter rootFilter; // private final DoSFilter dosFilter; // private final QoSFilter qosFilter; NodeHttp(ExtendedHttpService httpService) { - rootFilter = new RootFilter(); + // rootFilter = new RootFilter(); // dosFilter = new CustomDosFilter(); // qosFilter = new QoSFilter(); try { - httpService.registerFilter("/", rootFilter, null, null); + httpService.registerServlet("/!", new LinkServlet(), null, null); + // httpService.registerFilter("/", rootFilter, null, null); } catch (Exception e) { throw new CmsException("Cannot register filters", e); } @@ -45,6 +46,42 @@ class NodeHttp implements KernelConstants, ArgeoJcrConstants { public void destroy() { } + class LinkServlet extends HttpServlet { + private static final long serialVersionUID = 3749990143146845708L; + + @Override + protected void service(HttpServletRequest request, + HttpServletResponse response) throws ServletException, + IOException { + String path = request.getPathInfo(); + String userAgent = request.getHeader("User-Agent").toLowerCase(); + boolean isBot = false; + boolean isCompatibleBrowser = false; + if (userAgent.contains("bot") || userAgent.contains("facebook") + || userAgent.contains("twitter")) { + isBot = true; + } else if (userAgent.contains("webkit") + || userAgent.contains("gecko") + || userAgent.contains("firefox") + || userAgent.contains("msie") + || userAgent.contains("chrome") + || userAgent.contains("chromium") + || userAgent.contains("opera") + || userAgent.contains("browser")) { + isCompatibleBrowser = true; + } + + if (isBot) + log.warn("# BOT " + request.getHeader("User-Agent")); + if (isCompatibleBrowser && log.isTraceEnabled()) + log.trace("# BWS " + request.getHeader("User-Agent")); + // if (isCompatibleBrowser) {// redirect + response.setHeader("Location", "/#" + path); + response.setStatus(HttpServletResponse.SC_FOUND); + // } + } + } + /** Intercepts all requests. Authenticates. */ class RootFilter extends HttpFilter {