本文来自CSDN博客,转载出处:http://blog.csdn.net/royaki/archive/2009/05/07/4159279.aspx
1、建立一个Servlet并且实现Filter接口
该类需要实现Filter接口中的init() doFilter() destory()方法
其中init()方法自动在项目启动的时候加载,doFilter()在调用xml配置的路径是加载,destory()方法在退出项目的时候进行。
public class TestFilter implements Filter{
public void init(FilterConfig filterConfig) throws ServletException{
System.out.println("初始化Filter");
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws Exception{
System.out.println("进行doFilter");
chain(request,response); //使用这一句继续Servlet请求
}
public void destory(){
System.out.println("过滤器销毁");
}
}
2、在xml中配置Filter
<filter>
<filter-name></filter-name>
<filter-class></filter-class>
</filter>
<filter-mapping>
<filter-name></filter-name>
<url-pattern>/*</url-pattern> //这里想对哪个路径进行过滤就填写哪个
</filter-mapping>
应用:
编码过滤
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws Exception{
System.out.println("进行doFilter"编码过滤);
try
{
request.setCharacterEncoding("GB2312") ;
}
catch (Exception e)
{
e.printStackTrace();
}
chain.doFilter(request,response) ;
}
xml中的配置:
<url-pattern>/*</url-pattern> 对所有请求都过滤
敏感词汇过滤
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException,
ServletException
{
String content = request.getParameter("content") ;
// 如果indexOf返回-1则表示没有查到所要的内容
if(content!=null)
{
if(content.indexOf("AAA")==-1)
{
chain.doFilter(request,response) ;
}
else
{
System.out.println("有非法文字") ;
// 如果需要的话,此处依然可以使用RequestDispatcher进行跳转
}
}
else
{
chain.doFilter(request,response) ;
}
登录验证
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException,
ServletException
{
// Session属于HTTP范畴,所以ServletRequest对象需要先转换成HttpServletRequest对象
HttpServletRequest req = (HttpServletRequest)request ;
HttpSession session = req.getSession() ;
// 如果session不为空,则可以浏览其他页面
if(session.getAttribute("uname")!=null)
{
chain.doFilter(request,response) ;
}
else
{
// 通过requestDispatcher跳转到登陆页
request.getRequestDispatcher("login.jsp").forward(request,response) ;
}
}