Filter過濾器的使用
本篇文章是介紹javax.servlet包中Filter的幾個(gè)功能,一是字符編碼過濾,二是攔截指文件夾中的文件,實(shí)現(xiàn)登錄驗(yàn)證.實(shí)現(xiàn)以上兩個(gè)功能需以下幾個(gè)步驟:
1、實(shí)現(xiàn)javax.servlet.Filter接口,編寫兩個(gè)類,如下:
本篇文章是介紹javax.servlet包中Filter的幾個(gè)功能,一是字符編碼過濾,二是攔截指文件夾中的文件,實(shí)現(xiàn)登錄驗(yàn)證.實(shí)現(xiàn)以上兩個(gè)功能需以下幾個(gè)步驟:
1、實(shí)現(xiàn)javax.servlet.Filter接口,編寫兩個(gè)類,如下:
/**
?* 作用:過濾編碼
?*/
package filter;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
public class EncodingFilter implements Filter
{
??? protected FilterConfig filterConfig;
??? private String targetEncoding;
??? public EncodingFilter()
??? {
??????? targetEncoding = "gb2312";//直接初始化0912
??? }
??? public void init(FilterConfig filterconfig) throws ServletException
??? {
??????? filterConfig = filterconfig;
??????? //targetEncoding = filterconfig.getInitParameter("encoding");//web.xml掛參初始化
??? }
??? public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain)
??????? throws IOException, ServletException
??? {
??????? HttpServletRequest httpservletrequest = (HttpServletRequest)servletrequest;
??????? httpservletrequest.setCharacterEncoding(targetEncoding);
??????? System.out.println("使用" targetEncoding "對(duì)請(qǐng)求進(jìn)行編碼過濾");
??????? filterchain.doFilter(servletrequest, servletresponse);
??? }
??? public void setFilterConfig(FilterConfig filterconfig)
??? {
??????? filterConfig = filterconfig;
??? }
??? public void destroy()
??? {
??????? filterConfig = null;
??? }
}
?* 作用:過濾編碼
?*/
package filter;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
public class EncodingFilter implements Filter
{
??? protected FilterConfig filterConfig;
??? private String targetEncoding;
??? public EncodingFilter()
??? {
??????? targetEncoding = "gb2312";//直接初始化0912
??? }
??? public void init(FilterConfig filterconfig) throws ServletException
??? {
??????? filterConfig = filterconfig;
??????? //targetEncoding = filterconfig.getInitParameter("encoding");//web.xml掛參初始化
??? }
??? public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain)
??????? throws IOException, ServletException
??? {
??????? HttpServletRequest httpservletrequest = (HttpServletRequest)servletrequest;
??????? httpservletrequest.setCharacterEncoding(targetEncoding);
??????? System.out.println("使用" targetEncoding "對(duì)請(qǐng)求進(jìn)行編碼過濾");
??????? filterchain.doFilter(servletrequest, servletresponse);
??? }
??? public void setFilterConfig(FilterConfig filterconfig)
??? {
??????? filterConfig = filterconfig;
??? }
??? public void destroy()
??? {
??????? filterConfig = null;
??? }
}
/**
?* 作用:過濾外界非法的進(jìn)入頁(yè)面
?* 注意:使用該功能時(shí),一定要把登錄頁(yè)與被過濾文件夾設(shè)為同級(jí),否則會(huì)出現(xiàn)循環(huán)
?*/
package filter;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
public class ManageFilter implements Filter
{
??? String LOGIN_PAGE;
??? protected FilterConfig filterConfig;
??? public ManageFilter()
??? {
??????? LOGIN_PAGE = "/login.jsp";
??? }
??? public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain)
??????? throws IOException, ServletException
??? {
??????? HttpServletRequest request = (HttpServletRequest) servletrequest;
??????? HttpServletResponse response = (HttpServletResponse) servletresponse;
??????? HttpSession session = request.getSession();
??????? String key = "";
??????? try
??????? {
??????????? //通過驗(yàn)證時(shí)在session中存的一個(gè)標(biāo)志
???? key = (String) session.getAttribute("key");
??????????
???????????
??????????? if (key!= null&&key.equals("ok"))
??????????? {
??????????????
??????????????? filterchain.doFilter(servletrequest, servletresponse);
??????????? }
??????????? else
??????????? {
??????????????? response.sendRedirect(LOGIN_PAGE);
??????????????? System.out.println("被攔截一個(gè)未認(rèn)證的請(qǐng)求");
??????????? }
??????? }
??????? catch (Exception exception)
??????? {
??????????? exception.printStackTrace();
??????? }
??? }
??? public void setFilterConfig(FilterConfig filterconfig)
??? {
??????? filterConfig = filterconfig;
??? }
??? public void destroy()
??? {
??????? filterConfig = null;
??? }
??? public void init(FilterConfig filterconfig)
??????? throws ServletException
??? {
??????? filterConfig = filterconfig;
??? }
}
?* 作用:過濾外界非法的進(jìn)入頁(yè)面
?* 注意:使用該功能時(shí),一定要把登錄頁(yè)與被過濾文件夾設(shè)為同級(jí),否則會(huì)出現(xiàn)循環(huán)
?*/
package filter;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
public class ManageFilter implements Filter
{
??? String LOGIN_PAGE;
??? protected FilterConfig filterConfig;
??? public ManageFilter()
??? {
??????? LOGIN_PAGE = "/login.jsp";
??? }
??? public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain)
??????? throws IOException, ServletException
??? {
??????? HttpServletRequest request = (HttpServletRequest) servletrequest;
??????? HttpServletResponse response = (HttpServletResponse) servletresponse;
??????? HttpSession session = request.getSession();
??????? String key = "";
??????? try
??????? {
??????????? //通過驗(yàn)證時(shí)在session中存的一個(gè)標(biāo)志
???? key = (String) session.getAttribute("key");
??????????
???????????
??????????? if (key!= null&&key.equals("ok"))
??????????? {
??????????????
??????????????? filterchain.doFilter(servletrequest, servletresponse);
??????????? }
??????????? else
??????????? {
??????????????? response.sendRedirect(LOGIN_PAGE);
??????????????? System.out.println("被攔截一個(gè)未認(rèn)證的請(qǐng)求");
??????????? }
??????? }
??????? catch (Exception exception)
??????? {
??????????? exception.printStackTrace();
??????? }
??? }
??? public void setFilterConfig(FilterConfig filterconfig)
??? {
??????? filterConfig = filterconfig;
??? }
??? public void destroy()
??? {
??????? filterConfig = null;
??? }
??? public void init(FilterConfig filterconfig)
??????? throws ServletException
??? {
??????? filterConfig = filterconfig;
??? }
}
2、在web.xml中做一些設(shè)置
?<filter>
???? <filter-name>code</filter-name>
???? <filter-class>filter.EncodingFilter</filter-class>
?</filter>
?
?<filter>
???? <filter-name>manage</filter-name>
???? <filter-class>filter.ManageFilter</filter-class>
?</filter>
?<filter-mapping>
???? <filter-name>code</filter-name>
???? <url-pattern>/*</url-pattern>
?</filter-mapping>
?
?<filter-mapping>
???? <filter-name>manage</filter-name>
???? <!-- <url-pattern>/ShuiBaoRHPWK_NEW/system/ruhepaiwukou/*</url-pattern>-->
???? <url-pattern>/servlets-examples/*</url-pattern>
?</filter-mapping>
?<filter>
???? <filter-name>code</filter-name>
???? <filter-class>filter.EncodingFilter</filter-class>
?</filter>
?
?<filter>
???? <filter-name>manage</filter-name>
???? <filter-class>filter.ManageFilter</filter-class>
?</filter>
?<filter-mapping>
???? <filter-name>code</filter-name>
???? <url-pattern>/*</url-pattern>
?</filter-mapping>
?
?<filter-mapping>
???? <filter-name>manage</filter-name>
???? <!-- <url-pattern>/ShuiBaoRHPWK_NEW/system/ruhepaiwukou/*</url-pattern>-->
???? <url-pattern>/servlets-examples/*</url-pattern>
?</filter-mapping>