2016-07-01 22 views
5

Ho specificato un percorso per i file statici in un'applicazione Spark:Add `before` filtro per file statici in SparkJava

Spark.staticFileLocation("/public") 

Ora voglio aggiungere un filtro per alcuni file (ad esempio, per motivi di sicurezza), ma non funziona:

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

Funziona, tuttavia, per i mapping non statici. È possibile configurare un tale filtro anche per i file statici?

In altre parole, quali sono le migliori pratiche per Spark per proteggere i file statici (come i modelli per le pagine di amministrazione) dall'esposizione senza autenticazione?

+0

Ciao, stessa domanda, scintilla cuciture devono usare serverside motore di template (come freemarker). L'hai risolto? – andyf

+0

No, sfortunatamente non l'ho risolto. –

+0

Trace the source (spark 2.5): 'spark.http.matching.MatcherFilter.doFilter', sposta' line 90' (// gestisce le risorse statiche) su 'line 128' (dopo BeforeFilters.execute (context);), may risolvi questo problema. (Ma non ho ancora provato ..., perché ora decido di utilizzare un motore di template: Thymeleaf.) – andyf

risposta

6

È possibile utilizzare Spark StaticFilesConfiguration, non utilizzare il cablaggio integrato. Spark.staticFileLocation("/public") crea e invia una risposta prima che vengano controllati altri filtri o rotte. Prova a modificare:

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.configureExternal("/path/to/static/files/"); 
     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(); 
    } 
} 

a lungo termine, probabilmente vuole servire i file statici da Nginx o Apache, e se si è veramente successo, un CDN :)