码迷,mamicode.com
首页 > 其他好文 > 详细

IDEA项目搭建十一——添加拦截器及启动事件

时间:2018-07-19 13:48:06      阅读:773      评论:0      收藏:0      [点我收藏+]

标签:ready   nts   请求   执行   exception   inter   err   hand   dea   

程序启动时如果需要添加某些初始化代码可以使用以下事件处理

import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

/**
 * 程序初始化事件
 */
@Component
public class ApplicationEventListener implements ApplicationListener {
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
//        if (event instanceof ApplicationEnvironmentPreparedEvent) {
//            // 初始化环境变量
//        }else if(event instanceof ApplicationPreparedEvent){
//            // 初始化完成
//        }else if (event instanceof ContextRefreshedEvent) {
//            // 应用刷新
//        }else if (event instanceof ApplicationReadyEvent) {
//            // 应用已启动完成
//        }else if (event instanceof ContextStartedEvent) {
//            // 应用启动,需要在代码动态添加监听器才可捕获
//        }else if (event instanceof ContextStoppedEvent) {
//            // 应用停止
//        }else if (event instanceof ContextClosedEvent) {
//            // 应用关闭
//        }else {}
    }
}

过滤用户登录状态验证时普遍使用拦截器或过滤器spring boot 2.0使用以下方式

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 请求拦截器
 * 参考资料:https://www.cnblogs.com/holly8/p/6178828.html
 * 普遍继承HandlerInterceptorAdapter抽象类,其中多提供了一个异步拦截方法afterConcurrentHandlingStarted(),我们用不到所以直接实现基础接口
 * 调用顺序:preHandler(可多个) -> Controller -> postHandler(可多个) -> model渲染-> afterCompletion(可多个)
 */
public class RequestInterceptor implements HandlerInterceptor {

    /**
     * Action执行前调用
     * @return
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("调用拦截器");
        return true;//此处必须返回true使该请求继续向下执行,false则中断请求
    }

    /**
     * Action执行后,View渲染前调用
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {

    }

    /**
     * View渲染后调用,整个流程执行结束调用
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

    }
}
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 配置类
 * WebMvcConfigurerAdapter已被废弃,官方推荐改用WebMvcConfigurer
 */
@Configuration
public class MyInterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //将拦截器注入进程序,可同时注入多个拦截器
        registry.addInterceptor(new RequestInterceptor()).addPathPatterns("/**");
    }
}

 

IDEA项目搭建十一——添加拦截器及启动事件

标签:ready   nts   请求   执行   exception   inter   err   hand   dea   

原文地址:https://www.cnblogs.com/taiyonghai/p/9334925.html

(1)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!