1 package de.juplo.thymeproxy;
3 import de.juplo.thymeleaf.JuploDialect;
4 import java.util.HashMap;
6 import org.apache.http.impl.client.CloseableHttpClient;
7 import org.springframework.boot.SpringApplication;
8 import org.springframework.boot.autoconfigure.SpringBootApplication;
9 import org.springframework.context.annotation.Bean;
10 import org.springframework.core.Ordered;
11 import org.springframework.core.env.Environment;
12 import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
13 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
14 import org.springframework.web.servlet.mvc.UrlFilenameViewController;
15 import org.thymeleaf.resourceresolver.IResourceResolver;
16 import org.thymeleaf.resourceresolver.UrlResourceResolver;
17 import org.thymeleaf.spring4.SpringTemplateEngine;
18 import org.thymeleaf.spring4.view.ThymeleafView;
19 import org.thymeleaf.templateresolver.TemplateResolver;
22 @SpringBootApplication
23 public class Application extends WebMvcConfigurerAdapter
26 public RegexUrlHandlerMapping proxiedHandlerMapping(
27 ProxyHttpRequestHandler proxy,
28 UrlFilenameViewController views
31 RegexUrlHandlerMapping mapping = new RegexUrlHandlerMapping();
32 mapping.setOrder(Ordered.HIGHEST_PRECEDENCE);
33 Map<String, Object> mappings = new HashMap<>();
34 mappings.put("/thymeleaf/.*\\.html", proxy);
35 mappings.put("/img/.+", proxy);
36 mappings.put("/css/.+", proxy);
37 mappings.put("/js/.+", proxy);
38 mappings.put("/fonts/.+", proxy);
39 mappings.put("/.*\\.html", views);
40 mapping.setUrlMap(mappings);
45 public ProxyHttpRequestHandler proxyHttpRequestHandler(
46 CloseableHttpClient client,
50 ProxyHttpRequestHandler handler = new ProxyHttpRequestHandler();
51 handler.setClient(client);
52 handler.setOrigin(env.getProperty("thymeproxy.origin"));
53 handler.setTtl(30000l);
58 public UrlFilenameViewController urlFilenameViewController()
60 return new UrlFilenameViewController();
64 public TemplateResolver defaultTemplateResolver(
65 IResourceResolver resources,
69 TemplateResolver resolver = new TemplateResolver();
70 resolver.setResourceResolver(resources);
71 resolver.setPrefix("http://localhost:8080/thymeleaf/");
72 resolver.setSuffix(".html");
73 resolver.setTemplateMode("HTML5");
74 resolver.setCharacterEncoding("UTF-8");
75 resolver.setCacheable(Boolean.valueOf(env.getProperty("thymeproxy.cacheable")));
80 public TemplateResolver jsonTemplateResolver(
81 IResourceResolver resources,
85 TemplateResolver resolver = new TemplateResolver();
86 resolver.setResourceResolver(resources);
87 resolver.setPrefix("http://localhost:8080/thymeleaf/");
88 resolver.setSuffix(".json");
89 resolver.setTemplateMode("JSON");
90 resolver.setCharacterEncoding("UTF-8");
91 resolver.setCacheable(Boolean.valueOf(env.getProperty("thymeproxy.cacheable")));
96 public UrlResourceResolver thymeleafResourceResolver()
98 return new UrlResourceResolver();
102 public JuploDialect juploDialect()
104 return new JuploDialect();
108 public ThymeleafView error(SpringTemplateEngine templateEngine)
110 return new ErrorThymeleafView(templateEngine, "/thymeleaf/error.html");
114 public void addViewControllers(ViewControllerRegistry registry)
116 registry.addViewController("/").setViewName("forward:index.html");
120 public static void main(String[] args)
122 SpringApplication.run(Application.class, args);
126 static class ErrorThymeleafView extends ThymeleafView
128 ErrorThymeleafView(SpringTemplateEngine templateEngine, String templateName)
131 setTemplateEngine(templateEngine);