Java 为什么Spring Boot Microservice的参数主体具有空值,以及如何获取客户端应用程序具有的实际值?
在Spring Boot中,我有以下microservice,它需要主体对象,以便访问登录的用户信息:Java 为什么Spring Boot Microservice的参数主体具有空值,以及如何获取客户端应用程序具有的实际值?,java,json,spring,spring-boot,principal,Java,Json,Spring,Spring Boot,Principal,在Spring Boot中,我有以下microservice,它需要主体对象,以便访问登录的用户信息: @RequestMapping(value="/circular-save") public Boolean saveCircularView(HttpServletRequest request, Principal principal, HttpSession session, Locale locale, ModelAndView mav,
@RequestMapping(value="/circular-save")
public Boolean saveCircularView(HttpServletRequest request, Principal principal, HttpSession session, Locale locale, ModelAndView mav,
@ModelAttribute CircularsBean souqBean) {
System.out.println( "circular-save microservice Called...........principal="+principal);
//some user related code here that depends on principal
}
输出:
circular-save microservice Called.....................principal=null
我将上述微服务称为:
System.out.println("Will call circulars with principal:"+principal.getName());
restTemplate.getForObject("http://localhost:8081/circular-save", Boolean.class);
输出:
Will call circulars with principal:travelling.salesman
如您所见,主体值在客户端不为null,但在服务器端为null。如何在微服务之间正确地传递此主体对象
我的研究:
起初,我考虑在json请求中传递它并使用POST方法,但我失败了,因为它不是POJO,也不可能序列化它
我做了更多的研究,发现这行代码可以写在服务器端
principal = SecurityContextHolder.getContext().getAuthentication();
不幸的是,上面的解决方案给了我不同的对象,导致匿名用户与原始用户不同
我将感谢任何帮助。谢谢。主体是请求参数吗?另外,您正在执行一个
http.get
@R.G,我不确定它是否被称为请求参数,但它与其他参数一起出现,例如Spring中的请求和会话。是的,我正在使用http.get,这有什么问题吗?使用get
时,需要在URI中传递参数。我建议你尝试一个帖子,因为在这里微服务是另一个webapp。主体只有在您成功验证请求时才可用。JWT是实现这一目标的一种方法。请参考这个。使用JWT,当您使用令牌请求其他微服务时,第二个webapp中的将验证令牌并设置主体。