1 20 21 package com.methodhead.shim; 22 23 import javax.servlet.Filter ; 24 import javax.servlet.FilterConfig ; 25 import javax.servlet.ServletResponse ; 26 import javax.servlet.ServletRequest ; 27 import javax.servlet.FilterChain ; 28 import javax.servlet.ServletException ; 29 import javax.servlet.http.HttpServletRequest ; 30 import java.util.regex.Matcher ; 31 import java.util.regex.Pattern ; 32 import java.io.IOException ; 33 import com.methodhead.sitecontext.SiteContext; 34 import com.methodhead.aikp.IntKey; 35 import com.methodhead.persistable.PersistableException; 36 import com.methodhead.MhfException; 37 import com.methodhead.sitecontext.SiteContextFilter; 38 import org.apache.commons.lang.StringUtils; 39 import org.apache.log4j.Logger; 40 import org.apache.commons.lang.exception.ExceptionUtils; 41 42 47 public class ShimFilter 48 extends 49 SiteContextFilter 50 implements 51 Filter { 52 53 55 57 59 61 public void init( 62 FilterConfig filterConfig ) 63 throws 64 ServletException { 65 66 super.init( filterConfig ); 67 } 68 69 73 protected void processUnknownSiteContext( 74 HttpServletRequest httpRequest, 75 ServletResponse response, 76 FilterChain chain, 77 String path, 78 String pathInfo ) 79 throws 80 IOException , 81 ServletException { 82 83 if ( APPROOT.equals( path ) ) { 87 httpRequest.getRequestDispatcher( pathInfo ).forward( httpRequest, response ); 88 return; 89 } 90 91 if ( pathInfo.endsWith( ".do" ) ) { 95 httpRequest.getRequestDispatcher( pathInfo.toString() ).forward( httpRequest, response ); 96 return; 97 } 98 99 httpRequest.getRequestDispatcher( "/siteNotFound.do" ).forward( httpRequest, response ); 103 } 104 105 public void doFilter( 106 HttpServletRequest httpRequest, 107 ServletResponse response, 108 FilterChain chain, 109 SiteContext siteContext, 110 String pathInfo ) 111 throws 112 IOException , 113 ServletException { 114 115 if ( pathInfo.equals( "" ) || pathInfo.equals( "/" ) ) { 119 120 httpRequest.getRequestDispatcher( 124 "/viewpage" ).forward( httpRequest, response ); 125 126 return; 127 } 128 129 Matcher matcher = Pattern.compile( "^/(\\w+).shtml$" ).matcher( pathInfo ); 133 134 if ( matcher.matches() ) { 135 136 String alias = matcher.group( 1 ); 137 138 if ( logger_.isDebugEnabled() ) { 139 logger_.debug( 140 "Matched a shim page; alias=\"" + alias + "\"" ); 141 } 142 143 httpRequest.setAttribute( ShimGlobals.PAGEALIAS_KEY, matcher.group( 1 ) ); 147 148 if ( ShimGlobals.MODE_EDIT.equals( 152 httpRequest.getSession().getAttribute( ShimGlobals.MODE_KEY ) ) ) 153 httpRequest.getRequestDispatcher( 154 "/editPage.do?alias=" + matcher.group( 1 ) ).forward( 155 httpRequest, response ); 156 157 else 161 httpRequest.getRequestDispatcher( 162 "/viewpage" ).forward( httpRequest, response ); 163 164 return; 165 } 166 167 super.doFilter( httpRequest, response, chain, siteContext, pathInfo ); 171 } 172 173 public void destroy() { 174 } 175 176 178 180 private static Logger logger_ = Logger.getLogger( ShimFilter.class ); 181 } 182 | Popular Tags |