【发布时间】:2019-09-30 11:11:29
【问题描述】:
作为我项目要求的一部分,我正在尝试从我的父服务调用两个服务器 API。我的所有端点都是安全的,因此必须通过每个请求传递令牌。为了将令牌传递给从我的父控制器调用的端点,我使用了 micronaut 的令牌传播概念。但我仍然看到孩子请求出现“未经授权”的错误。注意我在父控制器方法中接收令牌(记录并验证)。下面是我的代码。
父控制器 - ClientUserController
package io.appter.portal.controllers;
import io.appter.portal.models.ClientContact;
import io.appter.portal.models.User;
import io.appter.portal.repositories.IClientManagementClient;
import io.appter.portal.repositories.IUserManagementClient;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Header;
import io.micronaut.http.annotation.Post;
import io.micronaut.security.annotation.Secured;
import io.micronaut.security.rules.SecurityRule;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
@Controller("clientuser")
public class ClientUserController {
private static final Logger LOG = LoggerFactory.getLogger(ClientUserController.class);
private IClientManagementClient clientManagementClient;
private IUserManagementClient userManagementClient;
public ClientUserController(IClientManagementClient clientManagementClient, IUserManagementClient userManagementClient) {
this.clientManagementClient = clientManagementClient;
this.userManagementClient = userManagementClient;
}
@Post("/")
@Secured(SecurityRule.IS_AUTHENTICATED)
public ClientContact createClientContactUser(ClientContact clientContact,
@Header("Authorization") String authorization
) {
LOG.info("Authorization token received is: " + authorization);
List<ClientContact> clientContacts = clientManagementClient.getClientContactByClientId(133);
LOG.info("client contact 0 - Email Address received from API is: " + clientContacts.get(0).getEmailAddress());
String testInfo = userManagementClient.test();
LOG.info("Test Info received from API is: " + testInfo);
return clientContact;
}
}
IUserManagementClient.java
package io.appter.portal.repositories;
import io.appter.portal.models.User;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.annotation.Post;
import io.micronaut.http.client.annotation.Client;
@Client(id = "usermanagement")
public interface IUserManagementClient {
@Post("/user")
public User createUser(User user);
@Get("/user/test")
public String test();
}
IClientManagementClient.java
package io.appter.portal.repositories;
import io.appter.portal.models.ClientContact;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.annotation.Post;
import io.micronaut.http.client.annotation.Client;
import java.util.List;
@Client(id = "clientmanagement")
public interface IClientManagementClient {
@Post("/clientcontact")
public ClientContact createClientContact(ClientContact clientContact);
@Get("/getClientContactByClientId/{id}")
public List<ClientContact> getClientContactByClientId(Integer id);
}
application.yml
micronaut:
application:
name: appter-portal-api
server:
port: 8080
cors:
enabled: true
security:
enabled: true
token:
jwt:
enabled: true
signatures:
secret:
generator:
secret: xxxxxxxxxx
writer:
header:
enabled: true
propagation:
enabled: true
service-id-regex: "clientmanagement"
http:
services:
usermanagement:
urls:
- "http://appterusersvc.com"
clientmanagement:
urls:
- "http://apptorclientmgmtsvc.com"
谁能帮我解决这个问题?
谢谢, 布达娜T
【问题讨论】:
标签: bearer-token micronaut propagation