一.过滤器的概念
当需要限制用户访问某些资源的时候或者在处理请求时提前处理某些资源时,可以用过
滤起来完成。
二.实现过滤器
SimpleFilter:
package com.zyy.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class SimpleFilter implements Filter {
public void destroy() {
System.out.println("***** 过滤器销毁 *****");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("***** doFilter之前 *****");
chain.doFilter(request, response);
System.out.println("***** doFilter之后 *****");
}
public void init(FilterConfig config) throws ServletException {
String initParam = config.getInitParameter("CaMnter");
System.out.println("***** init 初始化参数:" + initParam + " *****");
}
}
web.xml:
<filter>
<filter-name>simple</filter-name>
<filter-class>com.zyy.filter.SimpleFilter</filter-class>
<init-param>
<param-name>CaMnter</param-name>
<param-value>Save you from anything 07</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>simple</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
/*表示对于根目录下的以前诶操作都进行过滤。
Tomcat:
三.编码过滤
EncodingFilter:
package com.zyy.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter {
private String charSet;
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(this.charSet);
System.out.println("***** " + this.charSet + " *****");
}
public void init(FilterConfig filterConfig) throws ServletException {
this.charSet = filterConfig.getInitParameter("charSet");
}
}
web.xml:
<filter>
<filter-name>encoding</filter-name>
<filter-class>com.zyy.filter.EncodingFilter</filter-class>
<init-param>
<param-name>charSet</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样可以减少request.setCharacterEncoding(encoding);.这句话的重复出现了,
/*可以对所有页面设置统一的编码。
三.登录验证
SessionFilter:
package com.zyy.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
public class SessionFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
if (session.getAttribute("userid") != null) {
chain.doFilter(request, response);
} else {
request.getRequestDispatcher("login.jsp")
.forward(request, response);
}
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
这样可以将未进行登录的用户想通过地址重写的方式的访问过滤掉。