zoukankan      html  css  js  c++  java
  • SpringBoot拦截器

    拦截器的实现类

    ​ 在编写一个拦截器的类的时候需要实现HandlerInterceptor接口

    HandlerInterceptor接口方法如下:

        boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception;
    
        void postHandle(
                HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
                throws Exception;
    
        void afterCompletion(
                HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception;
    
    • preHandler:业务处理器处理请求之前被调用,对用户的request进行处理,若返回值为true,则继续调用后续的拦截器和目标方法;若返回值为false,则终止请求;这里可以加上登录校验,权限拦截等。
    • postHandler:Controller执行后但未返回视图前调用该方法,这里可以对返回用户前的模型数据进行加工处理。
    • afterCompletion:Controller执行后且返回视图后调用,可以得到Controller时的异常信息,这里可以记录操作日志,资源清理等。

    实现注册拦截

    这里我是重写的preHandler方法,用来登录拦截的。具体代码实现如下

        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            //获取request作用域中的token
            String token = request.getHeader("token");
            if (token == null) {
                token = request.getParameter("token");
            }
            if (token != null) {
                //解密token
                Claims claims = JwtUtils.checkJWT(token);
                if (claims != null) {
                    //获取解密后的信息
                    Integer userId = (Integer) claims.get("id");
                    String name = (String) claims.get("name");
                    request.setAttribute("user_id",userId);
                    request.setAttribute("name",name);
                    return true;
                }
            }
            return false;
        }
    

    在这,返回的无非就是一个true或false,所以中间我写的是我的业务逻辑代码,也就是通过获取token来判断用户是否登录,若未登录,则返回false,终止该请求。

    将拦截器加入到MVC中

    在SpringBoot 2.0以上, WebMvcConfigurerAdapter已过时,但是WebMvcConfigurerAdapter实际上是WebMvcConfigurer接口的空实现类。故有两种方法可以实现:推荐使用:implements WebMvcConfigurer

    方法有如下几种:

    1. @EnableWebMvc + implements WebMvcConfigurer
    在扩展类中重写父类的方法即可,这种方法会屏蔽springboot对SpringMVC的自动配置。
    2. implements WebMvcConfigurer
    在扩展类中重写父类的方法即可,这种方法会使用springboot对SpringMVC的自动配置。
    3. extends WebMvcConfigurationSupport
    在扩展类中重写父类的方法即可,这种方法会屏蔽springboot对SpringMVC的自动配置。

    接下来就是需要将拦截器加入到MVC中,也就是配置刚刚创建的拦截器,我们创建一个类,加上@Configuration这个注解并且实现WebMvcConfigurer这个接口

    然后重写addInterceptors这个方法把我们刚刚创建的拦截器配置好路径后添加到MVC中即可。

    具体实现如下:

    @Configuration
    public class IntercepterConfig implements WebMvcConfigurer {
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            //注册拦截器 并配置拦截路径
            registry.addInterceptor(new LoginIntercepter()).addPathPatterns("/user/api/v1/*/**");
            //添加拦截器
            WebMvcConfigurer.super.addInterceptors(registry);
        }
    }
    
  • 相关阅读:
    缩减apk大小
    android 的安全问题
    android listview 优化
    Python正则表达式指南
    程序员必须知道的几个国外IT网站
    去掉配置项,开发自信的软件
    去掉配置项,开发自信的软件
    Linux防火墙设置
    Linux防火墙设置
    linux下如何使用sftp命令进行文件上传和下载
  • 原文地址:https://www.cnblogs.com/atsdb/p/11747352.html
Copyright © 2011-2022 走看看