• Spring Boot 请求头token拦截 Swagger 支持请求头


    适用接口需授权token才能调用的场景

    @Configuration
    public class WebMvcConfigurer extends WebMvcConfigurationSupport {
    
        //添加拦截器
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            //接口签名认证拦截器
            registry.addInterceptor(new HandlerInterceptorAdapter() {
                @Override
                public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                    Result result = new Result();
                    String token = request.getHeader("token");
                    //token 校验
                    if (null == token) {
                        result.setCode(ResultCode.UNAUTHORIZED).setMessage("请求 header 缺少 token");
                        responseResult(response, result);
                        return false;
                    }
                    //TODO 进一步校验
                    //endregion
    
                    return true;
                }
            }).excludePathPatterns("/oauth/**");
        }
    
    }        

    其中,excludePathPatterns 为不必校验的路由,如 申请token接口

    如果你用了 Swagger ui,会导致swagger页面也被拦截,再排除

    .excludePathPatterns("/oauth/**")
                    .excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**");

    这样,swagger就能正常访问了。但默认是不支持请求头的,开发还是不方便,改配置如下

     1 @Configuration
     2 @EnableSwagger2
     3 public class Swagger2Configurer {
     4 
     5     @Bean
     6     public Docket createRestApi(){
     7         ParameterBuilder ticketPar = new ParameterBuilder();
     8         List<Parameter> pars = new ArrayList<>();
     9         ticketPar.name("token").description("user ticket")
    10                 .modelRef(new ModelRef("string")).parameterType("header")
    11                 .required(false).build(); //header中的token参数非必填,传空也可以
    12         pars.add(ticketPar.build());    //根据每个方法名也知道当前方法在设置什么参数
    13 
    14         return new Docket(DocumentationType.SWAGGER_2)
    15                 .apiInfo(apiInfo())
    16                 .select()
    17                 .apis(RequestHandlerSelectors.basePackage("com.***.pub"))
    18                 .paths(PathSelectors.any())
    19                 .build()
    20                 .globalOperationParameters(pars);
    21     }
    22 
    23     private ApiInfo apiInfo() {
    24         return new ApiInfoBuilder()
    25                 .title("*********开放接口")
    26                 .version("1.0.0")
    27                 .build();
    28     }
    29 }

     如下图

  • 相关阅读:
    各大OJ刷题进度和分类
    (HDU)1785 -- You Are All Excellent (你天赋异禀)
    (HDU)1720 -- A+B Coming (A+B来了)
    (HDU)1718 -- Rank (段位)
    (HDU)1708 -- Shopaholic (购物狂)
    (HDU)1678 -- Shopaholic (购物狂)
    (HDU)1673 -- Optimal Parking (停车位)
    (HDU)1587 -- Flowers (花)
    (HDU)1570 -- A C
    (HDU)1563 -- Find your present! (找到你的礼物)
  • 原文地址:https://www.cnblogs.com/qiujz/p/13229921.html
Copyright © 2020-2023  润新知