Spring如何编写拦截器呢?

书欣 Spring 发布时间:2023-01-10 11:25:00 阅读数:20238 1
下文笔者讲述Spring中编写拦截器的方法分享,如下所示

Spring拦截器简介

拦截器(Interceptor):
   对每一个请求处理前后进行相关的业务处理
   Spring拦截器其功能类似于Servlet中的过滤器(Filter)

编写拦截器

package com.java265.interceptor;
 
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * 拦截器:计算每一次请求的处理时间
 */
@Component
public class TestInterceptor extends HandlerInterceptorAdapter {
 
    /**
     * 在请求发生前执行
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object object) throws Exception {
        long startTime = System.currentTimeMillis();
        System.out.println("拦截器接收到请求的时间:" + new Long(startTime));
        request.setAttribute("startTime", startTime);
        return true;
    }
 
    /**
     * 在请求发生之后执行
     */
    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object object,
                           ModelAndView modelAndView) throws Exception {
        long startTime = (Long) request.getAttribute("startTime");
        request.removeAttribute("startTime");
        long endTime = System.currentTimeMillis();
        System.out.println("本此请求的处理时间为:" + endTime + " - " + startTime + " = " +
                new Long(endTime - startTime) + "ms");
        request.setAttribute("handlingTime", endTime - startTime);
    }
}

配置类中注册拦截器

package com.java265.interceptor;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
 
 
@Configuration
@EnableWebMvc
public class MyMvcConfig implements WebMvcConfigurer {
 
    TestInterceptor testInterceptor;
 
    @Autowired
    public void setTestInterceptor(TestInterceptor testInterceptor) {
        this.testInterceptor = testInterceptor;
    }
 
    /**
     * 注册拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(testInterceptor);
    }
}

控制器

package com.java265.interceptor;
 
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
@RequestMapping("/test")
public class TestController {
    @GetMapping("hello")
    public String sayHello() {
        return "java265.com";
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/Spring/202301/5324.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者