springboot使用攔截器

看一下HandlerInterceptor接口定義,關于具體的HandlerInterceptor說明大家可以看看源碼的官方doc說明,更加深入的了解這個接口,包括其一些實現(xiàn):

HandlerInterceptor接口

preHandle:controller執(zhí)行之前調用
postHandle:controller執(zhí)行之后,且頁面渲染之前調用
afterCompletion:頁面渲染之后調用,一般用于資源清理操作

看一個demo,自己寫一個攔截器實現(xiàn)HandlerInterceptor,重寫三個方法,

package com.zhihao.miao;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class LogHandlerInterceptor implements HandlerInterceptor {

    private Logger logger = LoggerFactory.getLogger(getClass());

    //請求執(zhí)行之前調用
    @Override
    public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
        System.out.println("==========preHandle==========" + handler.getClass());
        return true;
    }

    //請求之后,且頁面渲染之前調用
    @Override
    public void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {
       String UserAgent = request.getHeader("User-Agent");
       logger.info("UserAgent==="+UserAgent);
       String remoteIp = request.getRemoteHost()+","+request.getRequestURI();
       logger.info("remoteIp"+remoteIp);

    }

    //頁面渲染之后調用,一般用于資源清理操作
    @Override
    public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("===========afterCompletion=========");
    }
}

寫一個類,繼承WebMvcConfigurerAdapter抽象類,然后重寫addInterceptors方法,并調用registry.addInterceptor注冊攔截器并將該類加入到spring容器中,

package com.zhihao.miao;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SpringBootConfiguration
public class WebConfiguration extends WebMvcConfigurerAdapter {

    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LogHandlerInterceptor());
    }
}

定義一個Controller進行測試:

package com.zhihao.miao;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @GetMapping("/user/home")
    public String home(){
        logger.info("user home");
        return "user home";
    }
}

啟動類啟動,

package com.zhihao.miao;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

訪問http://127.0.0.1:8080/user/home

總結:

編寫一個攔截器步驟:

  • 寫一個攔截器,實現(xiàn)HandlerInterceptor接口
  • 寫一個類,繼承WebMvcConfigurerAdapter抽象類,然后重寫addInterceptors方法,并調用registry.addInterceptor注冊自定義的攔截器。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評論 6 342
  • 姓名: 李小娜 [嵌牛導讀]: SpringMVC 中的Interceptor 攔截器也是相當重要和相當有用的,...
    n184閱讀 3,305評論 0 4
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,810評論 11 349
  • 一 小影太累了,她拖著加完班后疲憊的身體走進這陌生卻收納了自己幾近十年的不足幾平方的房間。此時已經(jīng)是凌晨零點了,電...
    篇篇情書寄往事閱讀 1,071評論 3 54

友情鏈接更多精彩內容