是否可以修改 Header 中的 Blade-Auth 变更为 Authorization

Blade 未结 2 680

一、该问题的重现步骤是什么?

1. 对接一些第三方他们无法修改 Authorization -> Blade-Auth 

2. 

3.


二、你期待的结果是什么?实际看到的又是什么?

是否可以兼容 Authorization 和 Blade-Auth 的情况


三、你正在使用的是什么产品,什么版本?在什么操作系统上?


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

2条回答
  • 你这个需要修改系统的逻辑了。

    org.springblade.core.secure.interceptor.BasicInterceptor

    org.springblade.core.secure.interceptor.TokenInterceptor,主要是这两个类。

    E{TU)0%O55[AARK`O_NDRQV.png

    image.png

    1 讨论(0)
  • 2022-09-30 17:19
    package org.springblade.gateway.filter;
    
    import lombok.AllArgsConstructor;
    import lombok.extern.slf4j.Slf4j;
    import org.springblade.gateway.provider.AuthProvider;
    import org.springframework.cloud.gateway.filter.GatewayFilterChain;
    import org.springframework.cloud.gateway.filter.GlobalFilter;
    import org.springframework.core.Ordered;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.server.reactive.ServerHttpRequest;
    import org.springframework.stereotype.Component;
    import org.springframework.util.StringUtils;
    import org.springframework.web.server.ServerWebExchange;
    import reactor.core.publisher.Mono;
    
    /**
     * AuthorizationHeaderFilter
     * 为了兼容 Authorization Header 存在的Filter
     *
     * @author 郑查磊
     */
    @Slf4j
    @Component
    @AllArgsConstructor
    public class AuthorizationHeaderFilter implements GlobalFilter, Ordered {
       @Override
       public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
          // 1. 清洗请求头中from 参数
          ServerHttpRequest request = exchange.getRequest()
             .mutate()
             .headers(this::authorizationToBladeAuth)
             .build();
          return chain.filter(exchange.mutate().request(request).build());
       }
    
       private void authorizationToBladeAuth(HttpHeaders headers) {
          String authorization = headers.getFirst("Authorization");
          String bladeAuth = headers.getFirst(AuthProvider.AUTH_KEY);
          if (StringUtils.hasText(authorization) && !StringUtils.hasText(bladeAuth)) {
             headers.set(AuthProvider.AUTH_KEY, authorization);
          }
       }
    
       @Override
       public int getOrder() {
          return Integer.MIN_VALUE;
       }
    }



    这样写会不会有什么问题

    0 讨论(0)
提交回复