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.beans.BeanUtils;
8 import org.springframework.boot.SpringApplication;
9 import org.springframework.boot.autoconfigure.SpringBootApplication;
10 import org.springframework.context.annotation.Bean;
11 import org.springframework.core.Ordered;
12 import org.springframework.core.env.Environment;
13 import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
14 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
15 import org.springframework.web.servlet.mvc.UrlFilenameViewController;
16 import org.thymeleaf.resourceresolver.IResourceResolver;
17 import org.thymeleaf.resourceresolver.UrlResourceResolver;
18 import org.thymeleaf.spring4.view.ThymeleafView;
19 import org.thymeleaf.spring4.view.ThymeleafViewResolver;
20 import org.thymeleaf.templateresolver.TemplateResolver;
23 @SpringBootApplication
24 public class Application extends WebMvcConfigurerAdapter
27 public RegexUrlHandlerMapping proxiedHandlerMapping(
28 ProxyHttpRequestHandler proxy,
29 UrlFilenameViewController views
32 RegexUrlHandlerMapping mapping = new RegexUrlHandlerMapping();
33 mapping.setOrder(Ordered.HIGHEST_PRECEDENCE);
34 Map<String, Object> mappings = new HashMap<>();
35 mappings.put("/thymeleaf/.*\\.html", proxy);
36 mappings.put("/img/.+", proxy);
37 mappings.put("/css/.+", proxy);
38 mappings.put("/js/.+", proxy);
39 mappings.put("/fonts/.+", proxy);
40 mappings.put("/.*\\.html", views);
41 mapping.setUrlMap(mappings);
46 public ProxyHttpRequestHandler proxyHttpRequestHandler(
47 CloseableHttpClient client,
51 ProxyHttpRequestHandler handler = new ProxyHttpRequestHandler();
52 handler.setClient(client);
53 handler.setOrigin(env.getProperty("thymeproxy.origin"));
54 handler.setTtl(30000l);
59 public UrlFilenameViewController urlFilenameViewController()
61 return new UrlFilenameViewController();
65 public TemplateResolver defaultTemplateResolver(
66 IResourceResolver resources,
70 TemplateResolver resolver = new TemplateResolver();
71 resolver.setResourceResolver(resources);
72 resolver.setPrefix("http://localhost:8080/thymeleaf/");
73 resolver.setSuffix(".html");
74 resolver.setTemplateMode("HTML5");
75 resolver.setCharacterEncoding("UTF-8");
76 resolver.setCacheable(Boolean.valueOf(env.getProperty("thymeproxy.cacheable")));
81 public TemplateResolver jsonTemplateResolver(
82 IResourceResolver resources,
86 TemplateResolver resolver = new TemplateResolver();
87 resolver.setResourceResolver(resources);
88 resolver.setPrefix("http://localhost:8080/thymeleaf/");
89 resolver.setSuffix(".json");
90 resolver.setTemplateMode("JSON");
91 resolver.setCharacterEncoding("UTF-8");
92 resolver.setCacheable(Boolean.valueOf(env.getProperty("thymeproxy.cacheable")));
97 public UrlResourceResolver thymeleafResourceResolver()
99 return new UrlResourceResolver();
103 public JuploDialect juploDialect()
105 return new JuploDialect();
109 public ThymeleafView error()
111 ThymeleafView view = BeanUtils.instantiateClass(ThymeleafView.class);
112 view.setTemplateName("/thymeleaf/error.html");
117 public void addViewControllers(ViewControllerRegistry registry)
119 registry.addViewController("/").setViewName("forward:index.html");
123 public static void main(String[] args)
125 SpringApplication.run(Application.class, args);