Skip to content
Snippets Groups Projects
Commit 270b580b authored by Piotr Gawron's avatar Piotr Gawron
Browse files

allow caching for all static files

parent 9cbc634c
No related branches found
No related tags found
3 merge requests!1700Resolve "introduce new frontend to the jar file build process",!1644Draft: Resolve "cache drug/mirna/chemicals data in the background",!1637Resolve "remove tomcat requirement"
......@@ -4,6 +4,7 @@ import java.awt.Color;
import java.io.File;
import java.util.Calendar;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
......@@ -11,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.CacheControl;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.scheduling.annotation.EnableScheduling;
......@@ -48,17 +50,22 @@ public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
String path = getDataRootPath();
CacheControl cacheControl = CacheControl.maxAge(31, TimeUnit.DAYS);
registry.addResourceHandler("/**")
.addResourceLocations("/", "classpath:/");
.addResourceLocations("/", "classpath:/")
.setCacheControl(cacheControl);
registry.addResourceHandler("/minerva/**")
.addResourceLocations("/", "classpath:/");
.addResourceLocations("/", "classpath:/")
.setCacheControl(cacheControl);
registry.addResourceHandler("/map_images/**")
.addResourceLocations("file:" + path + "/map_images/");
.addResourceLocations("file:" + path + "/map_images/")
.setCacheControl(cacheControl);
registry.addResourceHandler("/minerva-big/**")
.addResourceLocations("file:" + path + "/minerva-big/");
.addResourceLocations("file:" + path + "/minerva-big/")
.setCacheControl(cacheControl);
}
private String getDataRootPath() {
......
......@@ -8,6 +8,7 @@ import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.logging.log4j.LogManager;
......@@ -33,13 +34,25 @@ public class CacheFilter implements Filter {
@Override
public void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain chain)
throws IOException, ServletException {
boolean disableCache = true;
if (req instanceof HttpServletRequest) {
String url = ((HttpServletRequest) req).getRequestURL().toString();
if (url != null && url.contains("minerva/resources")) {
disableCache = false;
}
}
HttpServletResponse response = (HttpServletResponse) res;
// caching on Safari
response.addHeader("Vary", "*");
// generic cache prevent mechanism
response.addHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.addHeader("Pragma", "no-cache");
response.addHeader("Expires", "0");
if (disableCache) {
// caching on Safari
response.addHeader("Vary", "*");
// generic cache prevent mechanism
response.addHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.addHeader("Pragma", "no-cache");
response.addHeader("Expires", "0");
}
chain.doFilter(req, response);
}
......
......@@ -129,24 +129,35 @@ public class SpringSecurityGeneralIntegrationTest extends ControllerIntegrationT
}
@Test
public void testAllowCacheForNonApiRequest() throws Exception {
public void testDisallowCacheForIndexRequest() throws Exception {
RequestBuilder request = get("/minerva/index.xhtml");
MockHttpServletResponse response = mockMvc.perform(request)
.andExpect(status().is2xxSuccessful())
.andReturn().getResponse();
assertFalse(response.getHeaderNames().contains("Pragma"));
assertFalse(response.getHeaderNames().contains("Vary"));
assertTrue(response.getHeaderNames().contains("Pragma"));
assertTrue(response.getHeaderNames().contains("Vary"));
assertTrue(response.getHeaderNames().contains("Cache-Control"));
}
@Test
public void testAllowCacheForRootReuqest() throws Exception {
RequestBuilder request = get("/");
public void testAllowCacheForNonApiRequest() throws Exception {
RequestBuilder request = get("/minerva/resources/minerva.js");
MockHttpServletResponse response = mockMvc.perform(request)
.andExpect(status().is2xxSuccessful())
.andReturn().getResponse();
assertFalse(response.getHeaderNames().contains("Pragma"));
assertFalse(response.getHeaderNames().contains("Vary"));
}
@Test
public void testDisallowCacheForRootReuqest() throws Exception {
RequestBuilder request = get("/");
MockHttpServletResponse response = mockMvc.perform(request)
.andExpect(status().is3xxRedirection())
.andReturn().getResponse();
assertTrue(response.getHeaderNames().contains("Pragma"));
assertTrue(response.getHeaderNames().contains("Vary"));
assertTrue(response.getHeaderNames().contains("Cache-Control"));
}
@Test
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment