springboot(四)拦截器与自定义异常

34 阅读1分钟

对用户信息拦截

异常处理

exception/MyCustomException: 自定义异常


package com.example.springboot2.exception;

/**
 * 自定义异常
 * 目的:
 *      统一处理异常信息
 *      便于解耦,可以在拦截器,控制层,业务层去使用
 */

public class MyCustomException extends  RuntimeException{
    public MyCustomException(String errorMsg){
        super(errorMsg);
    }
}

exception/GraceException: 封装自定义异常

package com.example.springboot2.exception;

public class GraceException {
    public static void display(String errMsg){
        throw new MyCustomException(errMsg);
    }
}

自定义拦截器

interceptor/UserInfoInterceptoralt+insert弹出,选择

image.png

package com.example.springboot2.interceptor;

import com.example.springboot2.exception.GraceException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

@Slf4j
public class UserInfoInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String userId = request.getHeader("userId");
        String userToken = request.getHeader("userToken");

        if (StringUtils.isEmpty(userId) || StringUtils.isEmpty(userToken)) {
            log.error("用户校验不通过,信息不完整");
            GraceException.display("用户校验不通过,信息不完整");
            return false;
        }

        // 假设真实的用户id是1001,用户token是abcxyz
        if (!userId.equalsIgnoreCase("1001")
                || !userToken.equalsIgnoreCase("abc")) {
            log.error("用户权限不通过");
            GraceException.display("用户权限不通过");
            return false;
        }

        /**
         * false: 请求被拦截
         * true: 请求放行,可以继续访问后面的controller
         */
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

配置路由拦截规则

config/InterceptorConfig

package com.example.springboot2.config;

import com.example.springboot2.interceptor.UserInfoInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Bean
    public UserInfoInterceptor userInfoInterceptor(){
        return new UserInfoInterceptor();
    }

    public void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(userInfoInterceptor())
                .addPathPatterns(("/upload"));
    }
}

测试

无对应字段

image.png

字段value不对应 image.png

字段key,value对应

image.png

/upload

image.png

image.png