JHipster:尝试从网关

时间:2016-06-21 21:50:57

标签: jhipster microservices

我遵循以下建议:https://jhipster.github.io/microservices-architecture/来组织我的微服务应用程序的架构。

我有一个设置,其中有一些微服务可供网关访问。我已经为所有组件(网关,微服务和注册表)提供了相同的秘密(jhipster.security.authentication.jwt.secret)。

但是,当我尝试从网关使用微服务时,通过以下方式,我总是会收到一条拒绝访问的消息(禁止403):

@FeignClient(value = "storageservice")
public interface StorageServiceClient {
    @RequestMapping(method = RequestMethod.GET, value = "api/applications")
    ResponseEntity<List<ApplicationDTO>> getApplications();
}

我通过这种方式进行测试(在我的网关中):

@RestController
@RequestMapping("/api")
public class StorageServiceTest {

@Inject
private DiscoveryClient discoveryClient;

@Inject
private RestTemplate template;

@Inject
private SecurityConfiguration security;

@Inject
private StorageServiceClient storageServiceClient;


@Inject
private AuthenticationManager authenticationManager;

@RequestMapping(value = "/apps",
        method = RequestMethod.GET,
        produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<List<ApplicationDTO>> getApplications(){
    ResponseEntity<List<ApplicationDTO>> apps = storageServiceClient.getApplications();
    Stream.of(apps).forEach(System.out::println);
    return apps;
}
}

我感兴趣的是,我已经测试了对微服务的直接访问(通过邮递员)和网关的路由访问,并且运行良好。但是,特别是在这种情况下,当我尝试通过API从网关使用微服务数据时,我收到403错误。

在我的微服务中,我有配置(在MicroServiceConfiguration类&#34; .antMatchers(&#34; / api / **&#34;)。authenticated()&#34;)。但在所有情况下,当我通过Postman进行测试时,我总是传递一个有效的JWT令牌。但只有在这种特殊情况下它才起作用......我甚至试图在我的&#34; StorageServiceClient&#34;中使用@Header注释。但它没有任何效果。

***********编辑***********:

我通过创建类似的RequestInterceptor解决了身份验证问题:

@Configuration
public class FeignConfig {

@Inject
private JHipsterProperties properties;

@Bean
public RequestInterceptor requestTokenBearerInterceptor() {
    return requestTemplate -> {
        String token = Jwts.builder().
                setSubject("admin")
                .claim("auth", "admin")
                .signWith(SignatureAlgorithm.HS512, properties.getSecurity().getAuthentication().getJwt().getSecret())
                .compact();
        requestTemplate.header("Authorization", "Bearer " + token);
    };
}}

0 个答案:

没有答案