附加java参数_Zuul spring安全性并在请求中添加附加参数

我正在使用Spring Microservices构建微服务,我有两个与之相关的问题 .

1.我在Api网关中有 spring 安全性,即 Zuul server ,现在如果我已经从流中读取一次要求进行身份验证(从POST请求获取用户名/传递),则Zuul不转发任何请求

new ObjectMapper().readValue(request.getInputStream(), UserDto.class);

How can I read the request and then again forward the same request to Downstream services?

Zuul没有向下游服务转发 request.setAttribute() ,因此解决方法是使用 ctx.addZuulRequestHeader ,这使得 Request Header 太大了,我如何实现 request.setAttribute 并进入下游服务 .

public Authentication getAuthentication(HttpServletRequest request) {

final String token = request.getHeader(AUTH_HEADER_NAME);

logger.info("token="+token);

if (token != null) {

logger.info("Entering getAuthentication");

final UserToken userInfo = tokenHandler.validateToken(token);

if (userInfo != null

&& token.equals(String.valueOf(redisUtility.getValue(userInfo.getUsername()+"_"+userInfo.getUniqueId())))) {

logger.info("Validating token key="+userInfo.getUsername()+"_"+userInfo.getUniqueId());

User user=userDetailsService.loadUserByUsername(userInfo.getUsername());

if(user!=null && user.getUsername().equals(userInfo.getUsername())

&& user.getLastPasswordResetTime()

request.setAttribute("username",user.getUsername());//**Not able to fetch this in Downstream services**

logger.info("Token Authenticated for User "+user.getUsername());

return new UserAuthentication(user);

}

}

}

return null;

}

public class SimpleFilter extends ZuulFilter {

private static Logger log = LoggerFactory.getLogger(SimpleFilter.class);

@Override

public String filterType() {

return "pre";

}

@Override

public int filterOrder() {

return 1;

}

@Override

public boolean shouldFilter() {

return true;

}

@Override

public Object run() {

RequestContext ctx = RequestContext.getCurrentContext();

HttpServletRequest request = ctx.getRequest();

request.setAttribute("test", "test");// Not able to get this in services

log.info(String.format("%s request to %s", request.getMethod(), request.getRequestURL().toString()));

return null;

}

@Bean

public SimpleFilter simpleFilter() {

return new SimpleFilter();

}

@RequestMapping(value = "/test/avl",method=RequestMethod.POST)

public String test(HttpServletRequest request) {

System.out.println(request.getAttribute("test")+"");

return "Spring in Action";

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值