parent
8d440a419b
commit
d58102e32c
|
@ -17,6 +17,7 @@ import java.nio.charset.StandardCharsets;
|
|||
@RestControllerAdvice
|
||||
@Profile("aspectExample")
|
||||
public class EscapeHtmlAspect implements RequestBodyAdvice {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(EscapeHtmlAspect.class);
|
||||
|
||||
@Override
|
||||
|
@ -26,7 +27,8 @@ public class EscapeHtmlAspect implements RequestBodyAdvice {
|
|||
}
|
||||
|
||||
@Override
|
||||
public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) throws IOException {
|
||||
public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, Type targetType,
|
||||
Class<? extends HttpMessageConverter<?>> converterType) throws IOException {
|
||||
logger.info("beforeBodyRead called");
|
||||
InputStream inputStream = inputMessage.getBody();
|
||||
return new HttpInputMessage() {
|
||||
|
@ -43,13 +45,15 @@ public class EscapeHtmlAspect implements RequestBodyAdvice {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
|
||||
public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType,
|
||||
Class<? extends HttpMessageConverter<?>> converterType) {
|
||||
// Return the modified object after reading the body
|
||||
return body;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handleEmptyBody(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
|
||||
public Object handleEmptyBody(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType,
|
||||
Class<? extends HttpMessageConverter<?>> converterType) {
|
||||
//return the original body
|
||||
return body;
|
||||
}
|
||||
|
@ -68,7 +72,7 @@ public class EscapeHtmlAspect implements RequestBodyAdvice {
|
|||
String input = stringBuilder.toString();
|
||||
// Escape HTML characters
|
||||
return input.replaceAll("&", "&")
|
||||
.replaceAll("<", "<")
|
||||
.replaceAll(">", ">");
|
||||
.replaceAll("<", "<")
|
||||
.replaceAll(">", ">");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.baeldung.modifyrequest.config;
|
||||
|
||||
import com.baeldung.modifyrequest.interceptor.EscapeHtmlRequestInterceptor;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
@ -17,7 +18,7 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
|
|||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
logger.info("addInterceptors() called");
|
||||
registry.addInterceptor(new EscapeHtmlRequestInterceptor())
|
||||
.addPathPatterns("/save");
|
||||
.addPathPatterns("/save");
|
||||
|
||||
WebMvcConfigurer.super.addInterceptors(registry);
|
||||
}
|
||||
|
|
|
@ -27,10 +27,9 @@ public class EscapeHtmlRequestWrapper extends HttpServletRequestWrapper {
|
|||
String input = stringBuilder.toString();
|
||||
// Escape HTML characters
|
||||
return input.replaceAll("&", "&")
|
||||
.replaceAll("<", "<")
|
||||
.replaceAll(">", ">")
|
||||
//.replaceAll("\"", """)
|
||||
.replaceAll("'", "'");
|
||||
.replaceAll("<", "<")
|
||||
.replaceAll(">", ">")
|
||||
.replaceAll("'", "'");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -44,9 +44,11 @@ public class EscapeHtmlAspectIntegrationTest {
|
|||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
mockMvc.perform(MockMvcRequestBuilders.post(URI.create("/save"))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(requestBody)))
|
||||
.andExpect(MockMvcResultMatchers.status().isCreated())
|
||||
.andExpect(MockMvcResultMatchers.content().json(objectMapper.writeValueAsString(expectedResponseBody)));
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(requestBody)))
|
||||
.andExpect(MockMvcResultMatchers.status()
|
||||
.isCreated())
|
||||
.andExpect(MockMvcResultMatchers.content()
|
||||
.json(objectMapper.writeValueAsString(expectedResponseBody)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,21 +31,23 @@ public class EscapeHtmlFilterIntegrationTest {
|
|||
@Test
|
||||
void givenFilter_whenEscapeHtmlFilter_thenEscapeHtml() throws Exception {
|
||||
Map<String, String> requestBody = Map.of(
|
||||
"name", "James Cameron",
|
||||
"email", "<script>alert()</script>james@gmail.com"
|
||||
"name", "James Cameron",
|
||||
"email", "<script>alert()</script>james@gmail.com"
|
||||
);
|
||||
|
||||
Map<String, String> expectedResponseBody = Map.of(
|
||||
"name", "James Cameron",
|
||||
"email", "<script>alert()</script>james@gmail.com"
|
||||
"name", "James Cameron",
|
||||
"email", "<script>alert()</script>james@gmail.com"
|
||||
);
|
||||
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
mockMvc.perform(MockMvcRequestBuilders.post(URI.create("/save"))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(requestBody)))
|
||||
.andExpect(MockMvcResultMatchers.status().isCreated())
|
||||
.andExpect(MockMvcResultMatchers.content().json(objectMapper.writeValueAsString(expectedResponseBody)));
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(requestBody)))
|
||||
.andExpect(MockMvcResultMatchers.status()
|
||||
.isCreated())
|
||||
.andExpect(MockMvcResultMatchers.content()
|
||||
.json(objectMapper.writeValueAsString(expectedResponseBody)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,14 +33,15 @@ public class EscapeHtmlInterceptorIntegrationTest {
|
|||
@Test
|
||||
void givenInterceptor_whenEscapeHtmlInterceptor_thenEscapeHtml() throws Exception {
|
||||
Map<String, String> requestBody = Map.of(
|
||||
"name", "James Cameron",
|
||||
"email", "<script>alert()</script>james@gmail.com"
|
||||
"name", "James Cameron",
|
||||
"email", "<script>alert()</script>james@gmail.com"
|
||||
);
|
||||
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
mockMvc.perform(MockMvcRequestBuilders.post(URI.create("/save"))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(requestBody)))
|
||||
.andExpect(MockMvcResultMatchers.status().is4xxClientError());
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.content(objectMapper.writeValueAsString(requestBody)))
|
||||
.andExpect(MockMvcResultMatchers.status()
|
||||
.is4xxClientError());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue