0

我正在尝试使用 Spring Boot 创建具有以下内容的应用程序:

第 3 方 HttpServlet 需要映射到“/data/*”以匹配以下内容:

  • “/Patient”作为“/data/Patient”给出
  • “/_services/*”作为“/data/_services/something”给出

然后我需要添加一个新的服务选项。我想使用使用“/data/_services/smart/”请求映射的 RestController 来执行此操作。

此外,我希望其他端点,如“/health”、“/management”,由调度程序 servlet 提供服务。如果我使用映射到“/”的默认调度程序 servlet,则“/health”、“/management”工作正常。

如果我为第 3 方 servlet 添加 ServletRegistrationBean,则“/data/Patient”等请求可以正常工作。@Bean public ServletRegistrationBean data() { HapiFhirServlet servlet = new HapiFhirServlet(myAppCtx, metadataRepository); ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(servlet, "/data/*"); 返回 servletRegistrationBean;}

但我无法将 RestController 映射到“/data/_services/smart”。我在尝试:

@Bean
@Autowired
public ServletRegistrationBean smartServicesRegistrationBean(DispatcherServlet dispatcherServlet) {
    return new ServletRegistrationBean(dispatcherServlet, "/data/_services/smart/*");
}

一旦我添加了这个 ServletRegistrationBean,路径“/data/_services/smart/ ”就起作用了,第 3 方 servlet 的路径起作用了,但是其他调度程序请求(“/health”、“/management”)失败了。看来我只能在“/”或“/data/_services/smart/ ”中使用调度程序,但不能同时使用。

有人可以建议吗?

这是我的应用程序类:

@EnableAutoConfiguration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, /*securedEnabled = true, */proxyTargetClass = true)
@Import({OAuth2ResourceConfig.class, MethodSecurityConfig.class})
@ComponentScan
public class HSPCReferenceApiApplication extends SpringBootServletInitializer    {

@Autowired
private WebApplicationContext myAppCtx;

@Autowired
private MetadataRepository metadataRepository;

public static void main(String[] args) {
    SpringApplication.run(HSPCReferenceApiApplication.class, args);
}

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(HSPCReferenceApiApplication.class);
}

@Bean
public ServletRegistrationBean data() {
    HapiFhirServlet servlet = new HapiFhirServlet(myAppCtx, metadataRepository);
    ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(servlet, "/data/*");
    return servletRegistrationBean;
}

@Bean
@Autowired
public ServletRegistrationBean smartServicesRegistrationBean(DispatcherServlet dispatcherServlet) {
    return new ServletRegistrationBean(dispatcherServlet, "/data/_services/smart/*");
}
}
4

0 回答 0