Filter过滤器,不过滤特定资源
不多说废话:
一 web.xml
<filter>
<filter-name>WXBackStageFilter</filter-name>
<filter-class>com.ccic.wechat.filter.WXBackStageFilter</filter-class>
<init-param>
<param-name>logonString</param-name>
<param-value>/index.jsp;login.do</param-value>
</init-param>
<init-param>
<param-name>includeString</param-name>
<param-value>.do;.jsp</param-value>
</init-param>
<init-param>
<param-name>redirectPath</param-name>
<param-value>/index.jsp</param-value>
</init-param>
<init-param>
<param-name>disabletestfilter</param-name>
<param-value>N</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>WXBackStageFilter</filter-name>
<url-pattern>/WXOA/*</url-pattern>
</filter-mapping>
二 filter.java
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
configgetServletContext();
HttpServletRequest hrequest = (HttpServletRequest) request;
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(
(HttpServletResponse) response);
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String userID= (String)req.getSession().getAttribute("userID");
String urlsString= req.getRequestURI();
//不过滤的url
String[] str1 = {"WXOA","login.jsp"};
for(String s:str1){
String [] urlStrings= hrequest.getRequestURI().split("/");
if (urlStrings[urlStrings.length-1].equals(s )) {
chain.doFilter(request, response);
return;
}
}
//不做过滤的文件
String[] str = {"css","js","jpg","png","gif"};
if (this.isContains(urlsString, str)) {// 只对指定过滤参数后缀进行过滤
chain.doFilter(request, response);
return;
}
if(StringUtil.isNotEmpty(userID)){
req.getSession().getAttribute("userPase");
chain.doFilter(request, response);
return;
}else {
//重定向
req.getContextPath();
wrapper.sendRedirect(req.getContextPath()+"/WXOA");
return;
}
}
public static boolean isContains(String container, String[] regx) {
boolean result = false;
for (int i = 0; i < regx.length; i++) {
String sdString=container.substring(container.lastIndexOf(".")+1);
if (sdString.equals(regx[i])) {
return true;
}
}
return result;
}
web.xml 中可定义不过滤的资源
在filter.java中获取 ,这样做比较灵活。以上代码为写死的。