1 10 package org.mmbase.servlet; 11 12 import javax.servlet.*; 13 import javax.servlet.http.*; 14 import java.net.URI ; 15 import java.net.URISyntaxException ; 16 import org.mmbase.module.builders.Jumpers; 17 import org.mmbase.module.core.*; 18 import org.mmbase.util.logging.*; 19 20 27 public class JumpersFilter implements Filter, MMBaseStarter { 28 private static final Logger log = Logging.getLoggerInstance(JumpersFilter.class); 29 private static MMBase mmbase; 30 private static Jumpers jumpers; 31 private static String name; 32 33 private Thread initThread; 34 35 40 public void setFilterConfig(FilterConfig fc) { 41 log.info("Setting filter-config"); 42 throw new UnsupportedOperationException ("This method is not part of the Servlet api 2.3"); 43 } 44 45 50 public FilterConfig getFilterConfig() { 51 log.info("Getting filter-config"); 52 throw new UnsupportedOperationException ("This method is not part of the Servlet api 2.3"); 53 } 54 55 public MMBase getMMBase() { 56 return mmbase; 57 } 58 59 public void setMMBase(MMBase mmb) { 60 mmbase = mmb; 61 } 62 63 public void setInitException(ServletException se) { 64 } 66 67 70 public void init(javax.servlet.FilterConfig filterConfig) throws ServletException { 71 log.info("Starting JumpersFilter with " + filterConfig); 72 name = filterConfig.getFilterName(); 73 MMBaseContext.init(filterConfig.getServletContext()); 74 MMBaseContext.initHtmlRoot(); 75 initThread = new MMBaseStartThread(this); 77 initThread.start(); 78 } 79 80 87 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws java.io.IOException , ServletException { 88 if (mmbase == null) { 89 filterChain.doFilter(servletRequest, servletResponse); 90 return; 91 } 92 if (jumpers == null) { 93 if (mmbase != null) { 94 jumpers = (Jumpers)mmbase.getBuilder("jumpers"); 95 } 96 if (jumpers == null) { 97 filterChain.doFilter(servletRequest, servletResponse); 98 return; } 100 } 101 HttpServletRequest req = (HttpServletRequest)servletRequest; 102 HttpServletResponse res = (HttpServletResponse)servletResponse; 103 110 String context = ""; 111 context = req.getContextPath(); 112 int contextPart = context.length(); 113 String reqURI = req.getRequestURI(); 114 String key = ""; 115 if (contextPart < reqURI.length()) { 116 key = req.getRequestURI().substring(contextPart+1); 118 } 119 120 if (log.isDebugEnabled()) { 121 log.debug("contextpath is: " + context); 122 log.debug("key is: " + key); 123 log.debug("uri is: " + reqURI); 124 } 125 126 if (key.indexOf('.') == -1 ) { 128 if (key.endsWith("/")) { 131 key = key.substring(0,key.length()-1); 132 if (log.isDebugEnabled()){ 133 log.debug("after removing trailing slash key becomes: " + key); 134 } 135 } 136 String url = jumpers.getJump(key); 138 if (url != null) { 139 148 150 URI redirURI = null; 156 try { 157 redirURI = new URI (url); 158 } catch (URISyntaxException ex) { 159 log.error ("jumper URI syntax is not valid"); 160 } 161 if (redirURI != null) { 162 if (redirURI.isAbsolute()) { 163 res.sendRedirect(url); 164 } else if (url.startsWith("/")) { 165 res.sendRedirect(url); 166 } else { 167 res.sendRedirect(context +"/" + url); 168 } 169 } 170 return; 171 } 172 } 173 174 filterChain.doFilter(servletRequest, servletResponse); 175 } 176 177 180 public void destroy() { 181 log.info("Filter " + name + " destroyed."); 182 initThread.interrupt(); 183 } 184 185 186 } 187
| Popular Tags
|