本文來自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) ;
}
}