1.配置過濾器
- xml配置: 在web.xml檔案中寫入配置資訊 配置順序為監聽器-過濾器-servlet
<!--配置過濾器
filter-name:過濾器名稱
filter-class:過濾器所在路徑
init-param:配置config對象參數
param-name:參數名
param-value:參數值-->
<filter>
<filter-name>filterusers</filter-name>
<filter-class>com.test5.filterusers</filter-class>
<init-param>
<param-name>ip</param-name>
<param-value>192.168.*.*</param-value>
</init-param>
</filter>
<!--比對過濾器作用範圍url-pattern:作用的url位址-->
<filter-mapping>
<filter-name>filterusers</filter-name>
<url-pattern>/loginfloder/*</url-pattern>
</filter-mapping>
/*
* 在過濾器類前使用@WebFilter()注釋
* filterName:名稱
* urlPatterns:過濾器作用url位址
* initParams:初始化參數,以WebInitParam()形式存入
* */
@WebFilter(filterName = "filterusers",urlPatterns ="/loginfloder/*",
initParams ={@WebInitParam(name="ip",value = "192.168.*.*")} )
無論是那種配置方式,過濾器隻需配置一次即可
2.過濾器實作方法以及生命周期
- init(FilterConfig config)方法(初始化階段):初始化過濾器,将配置檔案中的參數配置資訊寫入過濾器,即将config對象中的資訊寫入過濾器,具體操作如下:
- doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)方法(運作階段): 完成實際的過濾操作,當浏覽器通路的url位址與過濾器映射url位址相比對時,執行該方法,FilterChain對象執行後續操作
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter out=resp.getWriter();
if(request.getSession().getAttribute("user")==null){
out.println("<script>if(confirm('請先登入')){window.location.href='/index.jsp'}</script>");
}
else{
chain.doFilter(req, resp);
}
}
- destroy()方法(銷毀階段): 在銷毀過濾器之前執行該方法
3.常見問題
- 過濾器映射的url頁面應該設定為防止緩存,否則在浏覽器加載該頁面時會使下一次通路時直接通路緩存頁面,進而使過濾器失效
<meta charset="UTF-8">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Cache-Control" content="no-cache">