1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.tobago.facelets;
21
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24
25 import javax.servlet.Filter;
26 import javax.servlet.FilterChain;
27 import javax.servlet.FilterConfig;
28 import javax.servlet.ServletException;
29 import javax.servlet.ServletRequest;
30 import javax.servlet.ServletResponse;
31 import javax.servlet.annotation.WebFilter;
32 import javax.servlet.http.HttpServletRequest;
33 import javax.servlet.http.HttpServletRequestWrapper;
34 import javax.servlet.http.HttpServletResponse;
35 import java.io.IOException;
36 import java.lang.invoke.MethodHandles;
37
38
39
40 @WebFilter(urlPatterns = "/*")
41 public class HackResourceExtentionFilter implements Filter {
42
43 private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
44
45 private String prefix;
46
47 @Override
48 public void init(final FilterConfig filterConfig) throws ServletException {
49 if (LOG.isInfoEnabled()) {
50 LOG.info("Filter initialized.");
51 }
52 final String version = Package.getPackage("org.apache.myfaces.tobago.component").getImplementationVersion();
53 final String contextPath = filterConfig.getServletContext().getContextPath();
54 prefix = contextPath + "/tobago/standard/" + version + "/js/";
55 }
56
57 @Override
58 public void doFilter(
59 final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain)
60 throws IOException, ServletException {
61 if (servletRequest instanceof HttpServletRequest && servletResponse instanceof HttpServletResponse) {
62 final HttpServletRequest request = (HttpServletRequest) servletRequest;
63 final String requestUri = request.getRequestURI();
64 if (requestUri.startsWith(prefix) && !requestUri.endsWith(".js") && !requestUri.endsWith(".map")) {
65 HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(request) {
66 @Override
67 public String getRequestURI() {
68 return super.getRequestURI() + ".js";
69 }
70 @Override
71 public String getServletPath() {
72 return super.getServletPath() + ".js";
73 }
74
75 @Override
76 public StringBuffer getRequestURL() {
77 final StringBuffer buffer = super.getRequestURL();
78 buffer.append(".js");
79 return buffer;
80 }
81 };
82 filterChain.doFilter(wrapper, servletResponse);
83 } else {
84 filterChain.doFilter(servletRequest, servletResponse);
85 }
86 } else {
87 filterChain.doFilter(servletRequest, servletResponse);
88 }
89 }
90
91 @Override
92 public void destroy() {
93 }
94 }