简易Java Spring Interceptor

一、首先写实现HandlerInterceptor的类

package com.cognizant.xd.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

public class UserIntercepeptor implements HandlerInterceptor {
    long start;//拦截开始时间

    @Override
    //请求执行前执行
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("***preHandle starter***");
        System.out.println("Object:"+o);
        start = System.currentTimeMillis();
        return true;//true就执行,false则不执行
    }

    @Override
    /**
     * 视图渲染完成后行
     * 但必须是preHandle()返回为true时才执行
     */
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("***preHandle end***");
        System.out.println("mav:"+modelAndView);
        System.out.println("time:"+(System.currentTimeMillis()-start));//响应时间
    }

    @Override
    /**
     * 请求结束执行
     * 但必须是preHandle()返回为true时才执行
     */
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("***afterCompletion***");
        System.out.println("Object:"+o);
        System.out.println("Exception:"+e);
    }
}

二、然后写config

package com.cognizant.xd.config;

import com.cognizant.xd.interceptor.UserIntercepeptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
 * Created by KANADE_XD on 7/9/2020 11:19 AM
 */
@Configuration
public class InterConfig extends WebMvcConfigurerAdapter {
 
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new UserIntercepeptor()).addPathPatterns("/hello");
        super.addInterceptors(registry);
    }
}

三、WebMvcConfigurerAdapter常用方法

/** 解决跨域问题 **/
public void addCorsMappings(CorsRegistry registry) ;

/** 添加拦截器 **/
void addInterceptors(InterceptorRegistry registry);

/** 这里配置视图解析器 **/
void configureViewResolvers(ViewResolverRegistry registry);

/** 配置内容裁决的一些选项 **/
void configureContentNegotiation(ContentNegotiationConfigurer configurer);

/** 视图跳转控制器 **/
void addViewControllers(ViewControllerRegistry registry);

/** 静态资源处理 **/
void addResourceHandlers(ResourceHandlerRegistry registry);

/** 默认静态资源处理器 **/
void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);


addInterceptor:需要一个实现HandlerInterceptor接口的拦截器实例
addPathPatterns:用于设置拦截器的过滤路径规则
excludePathPatterns:用于设置不需要拦截的过滤规则

四、最后写路径为hello的controller测试

package com.cognizant.xd.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Created by KANADE_XD on 7/9/2020 11:19 AM
 */
@Controller
public class TestController {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello(){
        return "拦截器测试";
    }
}

五、测试结果:

***preHandle starter***
Object:public java.lang.String com.cognizant.xd.controller.TestController.hello()
***preHandle end***
mav:null
time:15
***afterCompletion***
Object:public java.lang.String com.cognizant.xd.controller.TestController.hello()
Exception:null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值