【问题标题】:Add `before` filter for static files in SparkJava在 SparkJava 中为静态文件添加“之前”过滤器
【发布时间】:2019-07-23 12:45:32
【问题描述】:

我在Spark 应用程序中指定了静态文件的位置:

Spark.staticFileLocation("/public")

现在我想为某些文件添加过滤器(例如出于安全目的),但它不起作用:

Spark.before("/admin.html", myFilter);

不过,它确实适用于非静态映射。是否也可以为静态文件配置这样的过滤器?

换句话说,Spark 保护静态文件(如管理页面的模板)免于在未经身份验证的情况下被公开的最佳做法是什么?

【问题讨论】:

  • 您好,同样的问题,seams spark 必须使用服务器端模板引擎(如 freemarker)。你解决了吗?
  • 不,很遗憾我还没有解决。
  • Trace the source(spark 2.5) : spark.http.matching.MatcherFilter.doFilter, move line 90( // 处理静态资源) 到line 128 (在BeforeFilters.execute(context);之后),可能会解决这个问题. (但我还没有尝试...,因为现在我决定使用模板引擎:thymeleaf。)

标签: java spark-java


【解决方案1】:

你可以使用 Spark 的StaticFilesConfiguration,只是不要使用内置接线。 Spark.staticFileLocation("/public") 在检查任何其他过滤器或路由之前创建并发送响应。试试这个:

package web;

import spark.Service;
import spark.staticfiles.StaticFilesConfiguration;

public class ServerExample {

    public ServerExample() {
        Service service = Service.ignite();
        service.port(1234);

        // All other filters first
        service.before((request, response) -> { /* Authentication filter */ });
        service.before("/admin.html", (request, response) ->
                service.halt(401, "Nothing to see here"));
        service.before((request, response) -> { /* Some other filter */ });

        // Static files filter is LAST
        StaticFilesConfiguration staticHandler = new StaticFilesConfiguration();
        staticHandler.configure("/public");
        service.before((request, response) ->
                staticHandler.consume(request.raw(), response.raw()));

        // All your routes (are belong to us)
        service.get("/", (req, res) -> "Hello world");
        service.get("/health", (req, res) -> "Peachy");
    }

    public static void main(String[] args) {
        new ServerExample();
    }
}

从长远来看,您可能希望提供来自 Nginx 或 Apache 的静态文件,如果您真的成功,还需要一个 CDN :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 2020-05-21
    • 2019-11-20
    • 2023-03-17
    • 2014-09-04
    • 2015-11-17
    • 1970-01-01
    相关资源
    最近更新 更多