1. 程式人生 > 程式設計 >使用Servlet Filter實現系統登入許可權

使用Servlet Filter實現系統登入許可權

Servlet Filter介紹

過濾器是一些web應用程式元件,可以繫結到一個web應用程式中。但是與其他web應用程式元件不同的是,過濾器是”鏈”在容器的處理過程中的。這就意味著它們會在servlet處理器之前訪問一個進入的請求,並且在外發響應資訊返回到客戶前訪問這些響應資訊。這種訪問使得過濾器可以檢查並修改請求和響應的內容。

Filter適用的場景:

1.為一個web應用程式的新功能建立模型(可被新增到web應用程式中或者從web應用程式中刪除而不需要重寫基層應用程式程式碼)

2.向過去的程式碼新增新功能

3.使用者授權的Filter: Filter 負責檢查使用者請求,根據請求過濾使用者非法請求

4.日誌Filter: 詳細記錄某些特殊的使用者請求

5.負責解碼的Filter: 包括對非標準編碼的請求解碼

Filter使用的位置:

過濾器放在web資源之前,可以在請求抵達它所應用的web資源(可以是一個Servlet、一個Jsp頁面,甚至是一個HTML頁面)之前截獲進入的請求,並且在它返回到客戶之前截獲輸出請求。Filter:用來攔截請求,處於客戶端與被請求資源之間,目的是重用程式碼。Filter鏈,在web.xml中哪個先配置,哪個就先呼叫。在filter中也可以配置一些初始化引數。

Filter的用途:

1.在HttpServletRequest 到達Servlet 之前,攔截客戶的HttpServletRequest

2.根據需要檢查HttpServletRequest ,也可以修改HttpServletRequest 頭和資料

3.在HttpServletResponse 到達客戶端之前,攔截HttpServletResponse

4.根據需要檢查HttpServletResponse ,可以修改HttpServletResponse 頭和資料

一個Filter 可負責攔截多個請求或響應:一個請求或響應也可被多個請求攔截。

使用Filter進行系統登入許可權校驗

這裡我們使用對session進行校驗的方式,當對某一模組進行請求時,先校驗當前使用者的請求是否有session存在,如果有,繼續訪問,如果沒有,即跳轉到登入頁。

第一步:

編寫自己的Filter攔截類,攔截類需要實現servlet的filter介面

public class WebFilter implements Filter{
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {

  }

  @Override
  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 currPath = request.getRequestURI();  //當前請求的URL

    if (session.getAttribute("logined") != null) {
      filterChain.doFilter(servletRequest,servletResponse);
    } else {
      response.sendRedirect("/login.jsp");
    }
  }

  @Override
  public void destroy() {

  }  
}

這裡使用了攔截器鏈,當我們配置了多個攔截器的時候,伺服器會按照web.xml中過濾器定義的先後循序組裝成一條鏈,然後一次執行其中的doFilter()方法。

第二步:

在web.xml中配置自定義的攔截器

web.xml:

<filter>
    <filter-name>webFilter</filter-name>
    <filter-class>com.test.interceptor.WebFilter</filter-class>
    <init-param>
      <param-name>skipPath</param-name>
      <param-value>ok.jsp</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>webFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

這樣,就配置好了我們自定義的攔截器,如果有多個攔截器的話,請注意攔截器配置的順序,攔截會按照從上至下的順序進行攔截,一般來說處理編碼的攔截器配置在最上面。

通過上述步驟的操作,此時就可以通過URI進行訪問。此時如果能夠取得Session中的logined值時,會直接進入下一步處理,否則直接進入登入頁面。從而就完成了session的校驗。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。