Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.sction.security.filter;
  
  import java.util.List;
  
 
 
 public class SecurityUrlFilter implements Filter {
 	private static final Logger logger = Logger
 	static final long serialVersionUID = 1L;
 	protected String errorPage = "/error.jsp";
 	protected int regexSize = 5;
 	protected int mode = .;
 	protected static List<FilterBeanregexList = new ArrayList<FilterBean>();
 
 	public SecurityUrlFilter() {
 		 = null;
 		 = null;
 	}
 
 	public static void add(FilterBean regex) {
 		.add(regex);
 	}
 
 	public static void remove(FilterBean regex) {
 		for (FilterBean fb : ) {
 			if (fb.getRegex().equals(regex.getRegex())) {
 				break;
 			}
 		}
 	}
 
 	public static List<FilterBeangetRegexList() {
 		return ;
 	}
 
 	public void init(FilterConfig filterConfigthrows ServletException {
 		this. = filterConfig;
 		 = filterConfig.getServletContext();
 		try {
 			 = Integer.parseInt(filterConfig
 					.getInitParameter("regexSize"));
 		} catch (Exception e) {
 			.error("regexSize的值必须为整数");
 		}
 		for (int i = 0; i <= i++) {
 			String regex = filterConfig.getInitParameter("regex" + i);
 			if (regex != null && !regex.equals("")) {
 				if (regex != null && !regex.equals("")) {
 					String modestr = filterConfig.getInitParameter("errorPage"
 							+ i);
 					int modex = 2;
 					if (modestr != null && !modestr.equals("")) {
 						try {
 							modex = Integer.parseInt(modestr);
 						} catch (Exception e) {
 							.error("mode[x]的值必须为整数");
 						}
 					}
 					.add(new FilterBean(regexfilterConfig
 							.getInitParameter("errorPage" + i), modex));
 				}
 			}
 		}
 
 	}
 
 	public void doFilter(ServletRequest servletRequest,
 			ServletResponse servletResponseFilterChain chain)
 		HttpServletRequest request = (HttpServletRequestservletRequest;
 		HttpServletResponse response = (HttpServletResponseservletResponse;
 		String path = request.getContextPath();
 		String uri = request.getRequestURI();
 		Enumeration<Stringnames = request.getParameterNames();
 		uri += "?";
 		while (names.hasMoreElements()) {
 			String name = names.nextElement();
 			String[] values = request.getParameterValues(name);
 			if (values != null && values.length > 0) {
 				for (int i = 0; i < values.lengthi++) {
					String value = values[i];
					uri += name + "=" + value + "&";
				}
			}
		}
		uri = uri.substring(0, uri.length() - 1);
		for (FilterBean regex : ) {
			Pattern pattern = null;
			if ( == -1) {
				pattern = Pattern.compile(regex.getRegex());
else {
				pattern = Pattern.compile(regex.getRegex(), );
			}
			Matcher m = pattern.matcher(uri);
			if (m.find()) {
				String page = regex.getErrorPage();
				if (page != null && !page.trim().equals("")
						&& !page.equalsIgnoreCase("null")) {
					page = path + page;
else {
					page = path + ;
				}
				.info("请求:" + uri);
				.info("非法请求即将跳转到:" + page);
				request.getRequestDispatcher(page).forward(requestresponse);
				return;
			}
		}
		chain.doFilter(requestresponse);
	}
	public void destroy() {
		 = null;
	}
class FilterBean {
	private String regex = "";
	private String errorPage = "";
	private int mode = .;
	public FilterBean(String regexString errorPageint mode) {
		this. = regex;
		this. = errorPage;
		this. = mode;
	}
	public String getRegex() {
		return ;
	}
	public void setRegex(String regex) {
		this. = regex;
	}
	public String getErrorPage() {
		return ;
	}
	public void setErrorPage(String errorPage) {
		this. = errorPage;
	}
	public int getMode() {
		return ;
	}
	public void setMode(int mode) {
		this. = mode;
	}
New to GrepCode? Check out our FAQ X