zuul向下游传值问题

zuul 作为路由 filter校验token时需要向下游服务传递userId null值 的坑

	@Override
    public Object run() throws ZuulException {
    
    
    	 // ThreadLocal
        RequestContext ctx = RequestContext.getCurrentContext();
         // 获取当前请求和返回值
        HttpServletRequest request = ctx.getRequest();
        HttpServletResponse response = ctx.getResponse();
        // 1、验证Token有效性 -> 用户是否登录过
        final String requestHeader = request.getHeader(jwtProperties.getHeader());
        String authToken = null;
        // Bearer header.payload.sign
        if (requestHeader != null && requestHeader.startsWith("Bearer ")) {
    
    
            authToken = requestHeader.substring(7);
            //TODO 验证token
			// 验证通过把userId写入header 
			if(true){
    
    
				/*注意 addZuulRequestHeader方法会把name强制转为小写 
				*	userId 转为 userid 应直接全部使用小写 避免出现错误
				*/
				ctx.addZuulRequestHeader("userId", userId);
			}
        }
        ...
	}

	public class UserMemberController {
    
    
	
    @Autowired
    private HttpServletRequest request;
    
	@RequestMapping(value = "", method = RequestMethod.GET)
    public BaseResponseVO getPage() {
    
    
    	String userId = request.getHeader("userid");
    	...
    }
	}

addZuulRequestHeader方法会把name强制转为小写 下面是源码

 public void addZuulRequestHeader(String name, String value) {
    
    
        this.getZuulRequestHeaders().put(name.toLowerCase(), value);
    }

猜你喜欢

转载自blog.csdn.net/u012153904/article/details/106251717