当前位置: 首页 > 知识库问答 >
问题:

Spring-Boot Jersey:允许Jersey提供静态内容

叶茂才
2023-03-14

该应用程序使用JDK8、Spring Boot和Spring Boot Jersey starter,并被打包为WAR(尽管它是通过Spring Boot Maven插件在本地运行的)。

我想做的是将我生成的文档(在构建时)作为欢迎页面。

我尝试了几种方法:

  1. 通过在application.properties中配置正确的init参数,让Jersey提供静态内容,如下所述
  2. 引入元数据-complete=falseweb.xml以便将生成的HTML文档列为欢迎文件。

这些都没有成功。

我希望避免启用Spring MVC或创建一个仅用于服务静态文件的Jersey资源。

下面是Jersey配置类(我尝试在其中添加ServletProperties.filter_static_content_regex,但未成功):

@ApplicationPath("/")
@ExposedApplication
@Component
public class ResourceConfiguration extends ResourceConfig {

   public ResourceConfiguration() {
      packages("xxx.api");
      packages("xxx.config");
      property(ServerProperties.BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true);
      property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);
   }
}

下面是Spring Boot应用程序类(我尝试用Spring.jersey.init.jersey.config.servlet.filter.StaticContentRegex=/.*HTML添加application.properties,但没有成功,我不确定这里的属性键应该是什么):

@SpringBootApplication
@ComponentScan
@Import(DataConfiguration.class)
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

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

共有1个答案

贡光明
2023-03-14

首先让我声明,静态内容不会被提供的原因是Jersey servlet的默认servlet映射,它是/*,并且占用了所有请求。因此无法访问为静态内容提供服务的默认servlet。除了下面的解决方案之外,另一个解决方案是简单地更改servlet映射。可以通过使用@applicationPath(“/othere-mapping”)注释ResourceConfig子类或设置application.properties属性spring.jersey.applicationPath来实现。

关于您的第一种方法,请看一下泽西ServletProperties。您尝试配置的属性是filter_static_content_regex。它指出:

该属性仅在将Jersey servlet容器配置为作为筛选器运行时适用,否则该属性将被忽略

Spring Boot默认情况下将Jersey servlet容器配置为servlet(如这里所述):

默认情况下,Jersey将被设置为ServletRegistrationBean类型的@html" target="_blank">bean中的Servlet(名为JerseyServletRegistration)。您可以通过创建一个同名的bean来禁用或重写该bean。您还可以通过设置spring.jersey.type=Filter(在这种情况下,要替换或覆盖的@beanjerseyfilterregistration)来使用过滤器而不是Servlet。

因此,只需在application.properties中设置属性spring.jersey.type=filter,它就应该起作用了。我测试过这个。

另外,无论配置为Servlet过滤器还是Servlet,就Jersey而言,功能都是相同的。

另外,您可以使用filter_static_content_regex来处理所有静态文件,而不是使用filter_forward_on_404。这其实是我过去测试的。我只是在resourceConfig中设置了它

@Component
public class JerseyConfig extends ResourceConfig {

    public JerseyConfig() {
        packages("...");
        property(ServletProperties.FILTER_FORWARD_ON_404, true);
    }
}
 类似资料:
  • 问题内容: 该应用程序使用JDK 8,Spring Boot和Spring Boot Jersey启动程序,并打包为WAR(尽管它是通过Spring Boot Maven插件在本地运行的)。 我想做的是将我在运行中(在构建时)生成的文档作为欢迎页面。 我尝试了几种方法: 通过按照此处所述配置 适当的init参数,让Jersey提供静态内容 引入以便将生成的HTML文档作为欢迎文件列出。 这些都没有

  • 有没有任何方法使Spring靴与泽西服务静态内容?我已经学习了一系列关于将Swagger集成到Spring Boot应用程序中的教程和代码示例。我可以让它交付基本的Swagger.json,但我不能让Swagger UI工作。 正如我所说的,我的应用程序运行良好,http://localhost:8080/swagger.json向我显示了普通的json文档,但http://localhost:8

  • 我正在用< code>Jetty服务器运行一个Spring Boot应用程序。API由< code>Jersey servlet提供服务。静态内容放在< code>src/main/static和< code > src/main/private-static 中。 问题#1未提供中的静态内容 中的内容是公开的,可以自由访问。据此:https://docs.spring.io/spring-boo

  • 在过去的几天里,我一直在和Spring保安公司战斗,所以我希望有人能在这里帮助我。 我正在使用Spring Boot 1.2.5 我使用的是Spring Actuator和Spring Remote Shell,它们已经从类路径中删除,认为它们可能会引起问题 我排除了SecurityAutoConfigsion,因为它可能会导致我的问题 这是我的主要课程 这是我的安全配置 我的问题/问题是 > C

  • 问题内容: 我无法让Spring-boot项目提供静态内容。 我已经放在一个命名的文件夹下。在其中,我有一个名为的文件夹。当我打包应用程序并运行它时,它找不到我放在该文件夹中的图像。 我试图把静态文件中,并但没有任何工程。 如果我我可以看到文件在正确文件夹的jar中:例如,但是调用:http://localhost:8080/images/head.png,我得到的只是一个404 有什么想法为什么