spring boot入門(九) springboot的過濾器filter。最完整、簡單易懂、詳細的spring boot教程。

關於過濾器和攔截器的區別,已經spring boot入門(七)中說明。下面舉個過濾器的應用場景,比如用戶信息頁只有再用戶登錄後纔可以進入,沒有登錄的用戶是無法進入的,此時便可以採用過濾器來講沒有登錄的用戶"過濾"掉。

1.建立filter包,在此包下建立UrlFilter類,此例我們模擬判斷用戶請求地址是否有誤:UrlFilter代碼如下:

@WebFilter(filterName = "test", urlPatterns = "/success/*")
public class UrlFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

        System.out.println("----------------------->過濾器被創建");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) servletRequest;
        String requestURI = req.getRequestURI();
        System.out.println("--------------------->過濾器:請求地址"+requestURI);
        if(!requestURI.contains("info")){
            servletRequest.getRequestDispatcher("/failed").forward(servletRequest, servletResponse);
        }else{
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }

    @Override
    public void destroy() {

        System.out.println("----------------------->過濾器被銷燬");
    }
}

注意:@WebFilter註解爲聲明此類爲filter,第一個參數爲該filter起一個名字,第二個參數爲說明要攔截的請求地址。該類實現了Filter接口,裏面有三個方法,分別爲過濾器創建、過濾方法和過濾器銷燬。我們在過濾方法doFilter執行過濾邏輯。同樣,在使用註解的方式(即@WebFilter)聲明過濾器時,需要再main函數類上添加@ServletComponentScan(basePackages = "此處寫明類地址,格式爲包名+類名(如com.yxc.*)"),具體代碼請見本人博客"spring boot入門(八)"。

2.爲使得模擬效果更好,在TestController類中添加了一個接口方法failed,代碼如下:

@RequestMapping("/failed")
public Map<String, String> requestFailed(){

    Map<String, String> map = new HashMap<>();
    map.put("code", "-1");
    map.put("msg", "請求錯誤");
    return map;
}

3.其中我們正常訪問的接口方法代碼如下:

@RequestMapping("/success/info")
public User userInfo(){

    User user = new User();
    user.setUsername("Yansir");
    user.setPassword("");
    user.setNickname("cherish");
    user.setGender("女");
    user.setAge("1");
    return user;
 }

4.說明一下過濾方法的內容,如果我們訪問的地址中包含"info",則正常向下執行即訪問/success/info接口,否則,則將請求跳轉到/failed接口。

5.測試:首先測試在瀏覽器輸入127.0.0.1:8080/success/info接口,內容如下:

再輸入一個錯誤的接口(但要以success/爲請求前路徑,因爲我們過濾器配置的爲此路徑下的web資源執行過濾方法),結果如下:

過濾器使用成功

發佈了47 篇原創文章 · 獲贊 111 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章