필터 코어 코드

4379 단어 java 기초
1. 전역 필터
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,ServletException {
	HttpServletRequest request = (HttpServletRequest) req;
	String url = request.getRequestURI();
	Pattern p = Pattern.compile(".(jsp|jspx|php|asp|aspx)");//               Pattern  
	Matcher m = p.matcher(url);
	boolean rs = m.find();//                  。 
	if (url.equals("/imageUp.jsp") || url.equals("/upfile.jsp") || url.equals("/plugins/ueditor/jsp/controller.jsp") || url.equals("/controller.jsp")) {
		logger.debug("ueditor file upload file!");
		chain.doFilter(req, res);//  
	} else if (rs) {//     ,        ,         
		logger.debug(".(jsp|jspx|php|asp|aspx) forbidden allow!");
		request.getRequestDispatcher("/404.html").forward(req, res);
	} else {
		chain.doFilter(req, res);//  
	}
}

2. 세션 필터, 로그인 시 검증할 요청 필터
 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
	ServletException {

	HttpServletRequest httpServletRequest = (HttpServletRequest) request;
	HttpServletResponse httpServletResponse = (HttpServletResponse) response;
	// String requesturi = httpServletRequest.getRequestURI();
	//     session    ,    
	HttpSession session = httpServletRequest.getSession();
	Operator sessionUser = (Operator) session.getAttribute(Constant.SESSION_OPERATOR);
	//                 ,    ,                  
	String servletPath = httpServletRequest.getServletPath();
	String queryString = httpServletRequest.getQueryString();
	List pathList = notNeedSessionCheck();
	if (!pathList.contains(servletPath)) {
		if (sessionUser == null) {
			String redirectURL = servletPath;
			if (StringUtil.isNotBlank(queryString)) {
				redirectURL = httpServletRequest.getContextPath() + servletPath + "?"
						+ StringUtil.isNull(queryString);
			}
			redirectURL = java.net.URLEncoder.encode(redirectURL, "UTF-8");
			httpServletResponse
					.sendRedirect(Global.getString("adminurl") + "/home.html?timeout=1&redirectURL="
							+ httpServletRequest.getContextPath() + redirectURL);
			return;
		}
	}

	chain.doFilter(request, response);
}

 
private List notNeedSessionCheck() {
	String[] paths = new String[] { "/modules/login.html", "/modules/login.action","/modules/validimg.html" };

	return Arrays.asList(paths);
}

3. FilterConfig의 사용법 {FilterConfig은 웹.xml에서 분배된 필터 초기화 파라미터를 가져올 수 있습니다.}
public class EncodingFilter implements Filter { 
    private FilterConfig filterConfig = null;
    private String encoding = null;   
    //      
    public void destroy() {   
         encoding = null;   
     }   
    //       
    public void doFilter(ServletRequest request, ServletResponse response,   
             FilterChain chain) throws IOException, ServletException {
        //   ServletContext   ,       
         ServletContext context = this.filterConfig.getServletContext(); 
         context.log("        ");
         String encoding = getEncoding();   
         if (encoding == null){   
             encoding = "gb2312";   
         }
         //             
         request.setCharacterEncoding(encoding);
         chain.doFilter(request, response);  
         context.log("         ");
     }   
    //     
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");   
     }   
   
    private String getEncoding() {   
        return this.encoding;   
     }   
} 


cacheTimeout
600



//  :
filterConfig.getInitParameter("locale-sensitive"); //true
filterConfig.getInitParameter("cacheTimeout"); // 600
filterConfig.getInitParameter(request.getRequestURI()); 

 
【총괄】
웹에서.xml에서 어떤 것을 먼저 설정하고, 어떤 것을 먼저 호출합니다.Filter에서도 초기화 파라미터를 설정할 수 있습니다.Java의 Filter는 표준 서브렛이 아니며 사용자 요청을 처리할 수도 없고 클라이언트에 대한 응답을 생성할 수도 없습니다.주로 HttpServletRequest를 예처리하거나 HttpServletResponse를 후처리하는 전형적인 처리 체인입니다.
 

좋은 웹페이지 즐겨찾기