首页 > 解决方案 > 使用 Jetty 和 Jersey 在 Spring Boot 中提供静态内容

问题描述

我正在使用Jetty服务器运行 Spring Boot 应用程序。API 由Jersey servlet. 静态内容放在src/main/static和中src/main/private-static

问题#1src/main/static未提供静态内容

里面的内容src/main/static是公开的,可以自由访问。据此:https ://docs.spring.io/spring-boot/docs/1.3.8.RELEASE/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc- static-content Spring boot 应该自动提供静态内容,但它没有。

问题#2如何src/main/private-static为这个在提供文件之前检查身份验证的自定义 servlet 设置静态内容目录。

我创建了另一个通过身份验证servlet提供静态内容

@Bean
public ServletRegistrationBean<HttpServlet> privateStaticContent() {
    return new ServletRegistrationBean<>(new HttpServlet() {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
            int status = isAuthenticated(req) ? 200 : 401;

            resp.setStatus(status);
        }
    }, "/private-static/*");
}

基本上这个 servlet 应该提供目录中的文件src/main/private-static,但我不确定如何以及在哪里配置它。

问题#3为了让 Jersey 在/api端点服务,我在application.properties

server.servlet.context-path=/api

但这使得所有 servlet 都使用这个/api端点。我怎样才能只为 Jersey servlet 而不是为其他人配置它。有没有类似的东西server.servlet.jersey.context-path=/api

标签: spring-bootjerseyjettyjersey-2.0

解决方案


src/main/java/<dir>/<static-content>不是 maven 或 gradle 会看到的东西。

src/main/java树仅用于,*.java没有其他用途。

也许你应该src/main/resources/<dir>/<static-content>改用?


推荐阅读