springMVC注解方式启动自定义拦截器

源于蚂蚁课堂的学习,点击这里查看

1.定义配置类取代XML配置

@Configuration
@EnableWebMvc
@EnableAsync
@ComponentScan({"live.yanxiaohui.mvc.controller", "live.yanxiaohui.mvc.service"})
public class MvcConfig implements WebMvcConfigurer {

    /**
     * 视图解析器
     * @return
     */
    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

    @Bean
    public TokenIntercepter tokenIntercepter() {
        return new TokenIntercepter();
    }

    /**
     * 添加拦截器并设置其拦截的路径
     *
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(tokenIntercepter()).addPathPatterns("/**");
    }
}

2.自定义拦截器 

public class TokenIntercepter implements HandlerInterceptor {

    /**
     * 拦截的业务,false拦截
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getParameter("token");
        System.out.println("==========token:[" + token + "]");
        if(StringUtils.isEmpty(token)){
            response.setStatus(500);
            response.getWriter().write("token is null");
            return false;
        }
        return true;
    }

    /**
     * 视图返回之前,业务方法执行之后的处理
     *
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("视图返回之前,业务方法执行之后的处理............");
    }

    /**
     * 视图返回后,返回响应之前的处理
     *
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("视图返回后,返回响应之前的处理..............");
    }
}

 3.创建springMVC的入口

public class MvcInit implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext context) throws ServletException {
        // 1.创建mvc容器
        AnnotationConfigWebApplicationContext app = new AnnotationConfigWebApplicationContext();
        // 2.mvc容器注册配置
        app.register(MvcConfig.class);
        // 3.设置dispather入口
        ServletRegistration.Dynamic dispatcher = context.addServlet("dispatcher", new DispatcherServlet(app));
        // 4.设置访问路径的映射
        dispatcher.addMapping("/");
        // 5.设置加载的优先级为最高
        dispatcher.setLoadOnStartup(1);
    }
}
这样,当请求参数没有token时,就会被拦截,响应回页面
原创文章 148 获赞 258 访问量 11万+

猜你喜欢

转载自blog.csdn.net/yxh13521338301/article/details/105362773