Добавить фильтр «до» для статических файлов в SparkJava.

Я указал расположение статических файлов в приложении Spark:

Spark.staticFileLocation("/public")

Теперь я хочу добавить фильтр для некоторых файлов (например, в целях безопасности), но он не работает:

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

Однако он работает для нестатических отображений. Можно ли настроить такой фильтр и для статических файлов?

Другими словами, как лучше всего использовать Spark для защиты статических файлов (например, шаблонов для страниц администрирования) от раскрытия без проверки подлинности?


person Alexey Subach    schedule 01.07.2016    source источник
comment
Привет, тот же вопрос, искра швов должна использовать механизм шаблонов на стороне сервера (например, freemarker). Вы решили это?   -  person andyf    schedule 29.09.2016
comment
Нет, к сожалению, не решил.   -  person Alexey Subach    schedule 29.09.2016
comment
Проследите источник (spark 2.5): spark.http.matching.MatcherFilter.doFilter, переместите line 90(// обрабатывать статические ресурсы) в line 128 (после BeforeFilters.execute(context);), может решить эту проблему. (Но я еще не пробовал..., потому что теперь я решил использовать механизм шаблонов: тимелеаф.)   -  person andyf    schedule 30.09.2016


Ответы (1)


Вы можете использовать StaticFilesConfiguration Spark, только не используйте встроенную проводку. 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 :)

person agmenc    schedule 14.12.2016