我正在使用spring boot创建一个基于微服务的项目。我使用eureka server进行服务发现和注册,还使用JWT进行授权和身份验证。每个微服务都有jwt验证,全局方法安全性在控制器上实现。我正在使用假客户端进行微服务间调用。
服务-1)主请求服务2)批准者服务;
approver service正在调用main service,以调用一个只能由管理员访问的方法,但在主请求服务端处理jwt验证时。。我只能在标题中看到基本授权标题。
我正在通过JWT令牌从我的审批服务在审批服务中的假冒客户端
@FeignClient("MAINREQUESTSERVICE")
public interface MainRequestClient {
@RequestMapping(method=RequestMethod.POST, value="/rest/mainrequest/changestatus/{status}/id/{requestid}")
public String changeRequestStatus(@RequestHeader("Authorization") String token,@PathVariable("requestid")int requestid,@PathVariable("status") String status);
}
从请求中读取头的代码
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) req;
HttpServletResponse response=(HttpServletResponse) res;
String header = request.getHeader("Authorization");
System.out.println("header is "+header);
if (header == null || !header.startsWith("Bearer")) {
chain.doFilter(request, res);
return;
}
UsernamePasswordAuthenticationToken authentication = getAuthentication(request);
SecurityContextHolder.getContext().setAuthentication(authentication);
chain.doFilter(request, response);
}
在调试此过滤器时,我在主请求服务中调试时在控制台Header上打印了令牌
因此,可以获得有关如何将我的JWT令牌从一个微服务传递到另一个微服务的帮助?
试试这个(基于https://medium.com/@IlyasKeser/faignclient-interceptor-for-bearer-token-oauth-f45997673a1)
@组件公共类FaignClientInterceptor实现RequestInterceptor{
private static final String AUTHORIZATION_HEADER="Authorization";
private static final String TOKEN_TYPE = "Bearer";
@Override
public void apply(RequestTemplate template) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && authentication instanceof JwtAuthenticationToken) {
JwtAuthenticationToken token = (JwtAuthenticationToken) authentication;
template.header(AUTHORIZATION_HEADER, String.format("%s %s", TOKEN_TYPE, token.getToken().getTokenValue()));
}
}
}
我有一个包含10个微服务的微服务架构,每个微服务提供一个客户端。在由微服务团队管理/控制的客户机内部,我们只接收参数并将它们传递给一个通用http调用程序,该调用程序接收endpoint和N个params,然后进行调用。所有微服务都使用http和web api(我猜技术并不重要)。 对于我来说,作为微服务团队提供一个客户是没有意义的,应该是消费者的责任,如果他们想创建一些抽象或者直接调用它是他们的
假设我已经有入口点(api网关)来处理身份验证和发布JWT令牌。然后用户用这个令牌调用某个APIendpoint。到目前为止,一切都很清楚。现在--这个endpoint需要与另一个微服务通信。该微服务必须获得授权信息(角色等)。另外-这个通道是异步的(JMS/Kafka),这意味着处理可能会被dalayed... 我也在考虑其他情况:我们有两个服务A和B,它们都公开可能被外部用户访问的API(JW
我有两个endpointapi,它们是/uploadand/redirect 我不知道为什么会发生这种情况。谢谢你的帮助。
我正在使用Datagramsocket和DatagramPacket制作一个简单的server_client应用程序。我想做的是:一个客户端将数据发送到服务器,服务器将这些数据发送到另一个客户端。问题是服务器从第一个客户端接收数据,但不将它们发送到另一个客户端,我怎么知道我将发送到的客户端的端口?端口没有改变吗? 这是客户端类: 服务器类: }
我正在使用尤里卡发现服务器。我可以通过通过使用服务名从另一个微服务调用一个微服务,这对Eureka服务器是可见的。我听说在不久的将来将被弃用。 我还可以通过使用从另一个微服务调用一个微服务,但在本例中,我需要使用整个主机名。我不能叫他们服务名称。 是的,我可以从属性文件设置基本url,这样不需要重新启动jar,我们就可以更改基本url。如果我们这样做,那么我们可能不需要任何discovery服务器