欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Servlet Filter實現(xiàn)系統(tǒng)登錄權(quán)限

 更新時間:2019年10月28日 15:44:19   作者:wtopps  
這篇文章主要為大家詳細(xì)介紹了使用Servlet Filter實現(xiàn)系統(tǒng)登錄權(quán)限,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

Servlet Filter介紹

過濾器是一些web應(yīng)用程序組件,可以綁定到一個web應(yīng)用程序中。但是與其他web應(yīng)用程序組件不同的是,過濾器是”鏈”在容器的處理過程中的。這就意味著它們會在servlet處理器之前訪問一個進(jìn)入的請求,并且在外發(fā)響應(yīng)信息返回到客戶前訪問這些響應(yīng)信息。這種訪問使得過濾器可以檢查并修改請求和響應(yīng)的內(nèi)容。

Filter適用的場景:

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

2.向過去的代碼添加新功能

3.用戶授權(quán)的Filter: Filter 負(fù)責(zé)檢查用戶請求,根據(jù)請求過濾用戶非法請求

4.日志Filter: 詳細(xì)記錄某些特殊的用戶請求

5.負(fù)責(zé)解碼的Filter: 包括對非標(biāo)準(zhǔn)編碼的請求解碼

Filter使用的位置:

過濾器放在web資源之前,可以在請求抵達(dá)它所應(yīng)用的web資源(可以是一個Servlet、一個Jsp頁面,甚至是一個HTML頁面)之前截獲進(jìn)入的請求,并且在它返回到客戶之前截獲輸出請求。Filter:用來攔截請求,處于客戶端與被請求資源之間,目的是重用代碼。Filter鏈,在web.xml中哪個先配置,哪個就先調(diào)用。在filter中也可以配置一些初始化參數(shù)。

Filter的用途:

1.在HttpServletRequest 到達(dá)Servlet 之前,攔截客戶的HttpServletRequest

2.根據(jù)需要檢查HttpServletRequest ,也可以修改HttpServletRequest 頭和數(shù)據(jù)

3.在HttpServletResponse 到達(dá)客戶端之前,攔截HttpServletResponse

4.根據(jù)需要檢查HttpServletResponse ,可以修改HttpServletResponse 頭和數(shù)據(jù)

一個Filter 可負(fù)責(zé)攔截多個請求或響應(yīng):一個請求或響應(yīng)也可被多個請求攔截。

使用Filter進(jìn)行系統(tǒng)登錄權(quán)限校驗

這里我們使用對session進(jìn)行校驗的方式,當(dāng)對某一模塊進(jìn)行請求時,先校驗當(dāng)前用戶的請求是否有session存在,如果有,繼續(xù)訪問,如果沒有,即跳轉(zhuǎn)到登錄頁。

第一步:

編寫自己的Filter攔截類,攔截類需要實現(xiàn)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();  //當(dāng)前請求的URL

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

  @Override
  public void destroy() {

  }  
}

這里使用了攔截器鏈,當(dāng)我們配置了多個攔截器的時候,服務(wù)器會按照web.xml中過濾器定義的先后循序組裝成一條鏈,然后一次執(zhí)行其中的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>

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringCloud實現(xiàn)Eureka服務(wù)注冊與發(fā)現(xiàn)

    SpringCloud實現(xiàn)Eureka服務(wù)注冊與發(fā)現(xiàn)

    這篇文章主要介紹了SpringCloud如何實現(xiàn)Eureka服務(wù)注冊與發(fā)現(xiàn),幫助大家更好的理解和學(xué)習(xí)使用SpringCloud,感興趣的朋友可以了解下
    2021-05-05
  • Java參數(shù)傳遞實現(xiàn)代碼及過程圖解

    Java參數(shù)傳遞實現(xiàn)代碼及過程圖解

    這篇文章主要介紹了Java參數(shù)傳遞實現(xiàn)代碼及過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Java實現(xiàn)簡單的抽牌游戲

    Java實現(xiàn)簡單的抽牌游戲

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)簡單的抽牌游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Java多線程編程詳細(xì)解釋

    Java多線程編程詳細(xì)解釋

    這篇文章主要介紹了java多線程編程實例,分享了幾則多線程的實例代碼,具有一定參考價值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下。
    2021-11-11
  • Java 實現(xiàn)常見的非對稱加密算法

    Java 實現(xiàn)常見的非對稱加密算法

    這篇文章主要介紹了Java 實現(xiàn)常見的非對稱加密算法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • Java遞歸造成的堆棧溢出問題及解決方案

    Java遞歸造成的堆棧溢出問題及解決方案

    在Java中,遞歸造成的堆棧溢出問題通常是因為遞歸調(diào)用的深度過大,導(dǎo)致調(diào)用??臻g不足,解決這類問題的一種常見方法是使用非遞歸的方式重寫算法,即使用迭代替代遞歸,需要的朋友可以參考下
    2024-08-08
  • Springboot下RedisTemplate的兩種序列化方式實例詳解

    Springboot下RedisTemplate的兩種序列化方式實例詳解

    這篇文章主要介紹了Springboot下RedisTemplate的兩種序列化方式,通過定義一個配置類,自定義RedisTemplate的序列化方式,結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • SpringBoot@DeleteMapping(/xxx/{id})請求報405的解決

    SpringBoot@DeleteMapping(/xxx/{id})請求報405的解決

    這篇文章主要介紹了SpringBoot@DeleteMapping(/xxx/{id})請求報405的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • springboot的Customizer源碼解析

    springboot的Customizer源碼解析

    這篇文章主要為大家介紹了springboot的Customizer源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • SpringBoot 整合 Netty 多端口監(jiān)聽的操作方法

    SpringBoot 整合 Netty 多端口監(jiān)聽的操作方法

    Netty提供異步的、基于事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用程序框架,用以快速開發(fā)高性能、高可靠性的網(wǎng)絡(luò) IO 程序,是目前最流行的 NIO 框架,這篇文章主要介紹了SpringBoot 整和 Netty 并監(jiān)聽多端口,需要的朋友可以參考下
    2023-10-10

最新評論