javaweb----Filter

來源:互聯網
上載者:User

標籤:odi   配置   etc   初始化   username   check   重點   技術分享   webapp   

定義

過濾器:準系統是對servlet容器調用Servlet的過程進行攔截,從而在Servlet響應前後實現一些特殊功能
javaAPI提供三個介面,Filter,FilterChain,FilterConfig

實現介面Filter
public class LoginFilter2 implements Filter {    public LoginFilter2() {        // TODO Auto-generated constructor stub    }    public void destroy() {        // TODO Auto-generated method stub    }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {             chain.doFilter(request,response);            }    public void init(FilterConfig fConfig) throws ServletException {        // TODO Auto-generated method stub    }}

生命週期:載入----->調用構造器(調用一次)-------->初始化init()(調用一次)------->doFilter()(可以調用多次和servlet中的service一樣)

執行個體

1.login.jsp代碼 ,hello.jsp就不給出了,隨便寫點

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>  <form action="${pageContext.request.contextPath }/hello.jsp"  method="post">  使用者:<input type="text" name="username">${user_msg }<br>  密碼:<input type="password" name="password">${pass_msg}<br>  <button>提交</button>  </form></body></html>
  1. LoginFilter攔截器用於檢查使用者名稱 ,擷取初始化參數“Tom”來比較
package com.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 LoginFilter implements Filter{    @Override    public void destroy() {        // TODO Auto-generated method stub            }    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain arg2)            throws IOException, ServletException {        String username=request.getParameter("username");        String password=request.getParameter("password");        String name=config.getInitParameter("Username");        if(username.equals(name)) {            arg2.doFilter(request, response);        }else {            request.setAttribute("user_msg", "使用者名稱錯誤");            request.getRequestDispatcher("login.jsp").forward(request, response);        }            }    FilterConfig config;    @Override    public void init(FilterConfig config) throws ServletException {        // TODO Auto-generated method stub        this.config=config;    }}

3.web.XML配置代碼,和Servlet配置一樣,只是名不一樣
注意:自己配置的Filter攔截順序就是代碼書寫順序,如果使用註解自動設定的話攔截順序是按Filter類的名來排序的,

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  <context-param>    <param-name>Password</param-name>    <param-value>1234</param-value>  </context-param>    <filter>    <filter-name>loginfilter</filter-name>    <filter-class>com.filter.LoginFilter</filter-class>    <init-param>      <param-name>Username</param-name>      <param-value>Tom</param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>loginfilter</filter-name>    <url-pattern>/hello.jsp</url-pattern>  </filter-mapping>  <filter>    <filter-name>checkfilter</filter-name>    <filter-class>com.filter.CheckFilter</filter-class>  </filter>  <filter-mapping>    <filter-name>checkfilter</filter-name>    <url-pattern>/hello.jsp</url-pattern>  </filter-mapping></web-app>

4.檢查密碼的代碼,重點練習擷取全域變數

package com.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 CheckFilter implements Filter{    @Override    public void destroy() {        // TODO Auto-generated method stub            }    @Override    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)            throws IOException, ServletException {        String password=arg0.getParameter("password");        String pass=config.getServletContext().getInitParameter("Password");        if(password.equals(pass)) {            arg2.doFilter(arg0, arg1);        }else {            arg0.setAttribute("pass_msg", "密碼錯誤");            arg0.getRequestDispatcher("login.jsp").forward(arg0, arg1);        }            }    FilterConfig config;    @Override    public void init(FilterConfig config) throws ServletException {        // TODO Auto-generated method stub        this.config=config;    }}

javaweb----Filter

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.