1 24 package org.riotfamily.common.web.util; 25 26 import javax.servlet.http.HttpServletRequest ; 27 import javax.servlet.http.HttpServletResponse ; 28 29 import org.springframework.util.AntPathMatcher; 30 import org.springframework.util.PathMatcher; 31 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; 32 import org.springframework.web.util.UrlPathHelper; 33 34 public class PathMatchingInterceptor extends HandlerInterceptorAdapter { 35 36 private PathMatcher pathMatcher = new AntPathMatcher(); 37 38 private UrlPathHelper urlPathHelper = new UrlPathHelper(); 39 40 private String [] includes; 41 42 private String [] excludes; 43 44 public void setExcludes(String [] excludes) { 45 this.excludes = excludes; 46 } 47 48 public void setIncludes(String [] includes) { 49 this.includes = includes; 50 } 51 52 public void setPathMatcher(PathMatcher pathMatcher) { 53 this.pathMatcher = pathMatcher; 54 } 55 56 public final boolean preHandle(HttpServletRequest request, 57 HttpServletResponse response, Object handler) throws Exception { 58 59 String lookupPath = urlPathHelper.getLookupPathForRequest(request); 60 if (anyMatch(excludes, lookupPath) && !anyMatch(includes, lookupPath)) { 61 return true; 62 } 63 return doPreHandle(request, response, handler); 64 } 65 66 protected boolean doPreHandle(HttpServletRequest request, 67 HttpServletResponse response, Object handler) throws Exception { 68 69 return true; 70 } 71 72 protected boolean anyMatch(String [] patterns, String path) { 73 if (patterns == null) { 74 return false; 75 } 76 for (int i = 0; i < patterns.length; i++) { 77 if (pathMatcher.match(patterns[i], path)) { 78 return true; 79 } 80 } 81 return false; 82 } 83 84 } 85 | Popular Tags |