0
点赞
收藏
分享

微信扫一扫

Spring注解实现SpringMVC拦截器

干自闭 2022-03-30 阅读 52
javaspring

实现思路:
1.编写类实现HandlerInterceptor接口
2.重写接口中的方法
PreHandler: // 在被拦截资源(方法)前执行
返回值:true :放行
false:拦截
Posthandler // 在被拦截资源(方法)后执行
afterCompletion // 在Posthandler方法后执行
释放资源
3.配置拦截类
配置通过WebMvcConfiguration的实现类配置拦截器类(配置要拦截的资源)

/**
 * 权限检查拦截器 
 * 定义一个权限类实现HandlerInterceptor接口,重写3个方法
 */
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

@Component
public class GameInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
            HandlerMethod method = (HandlerMethod) handler;
            //获取执行的类名
            String className = method.getBeanType().getName();
            //获取执行的方法名
            String methodName = method.getMethod().getName();
            System.out.println(className+":"+methodName+",开始执行时间为:"+System.currentTimeMillis());
            return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
            throws Exception {
//        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
        System.out.println("被拦截的资源执行后执行的方法");
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerMethod method = (HandlerMethod) handler;
        //获取执行的类名
        String className = method.getBeanType().getName();
        //获取执行的方法名
        String methodName = method.getMethod().getName();
        System.out.println(className+":"+methodName+",执行结束时间为:"+System.currentTimeMillis());
    }
}

这里是引用
SpringMVC拦截器配置

@Configuration
@ComponentScan({"com.demo.interceptor"})  // 扫描拦截器类所在的包
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {
}

配置拦截器类

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
    @Override
    /**
     * 配置要拦截的资源
     */
    protected void addInterceptors(InterceptorRegistry registry) {
        //设置拦截的规则为 /game/**
        // addPathPatterns("/game/**","/brand")
        registry.addInterceptor(new GameInterceptor()).addPathPatterns("/game/**","/game");
    }
}
举报

相关推荐

0 条评论