Stirling-PDF/src/main/java/stirling/software/SPDF/config/CleanUrlInterceptor.java

80 lines
2.4 KiB
Java
Raw Normal View History

2023-05-01 21:57:48 +01:00
package stirling.software.SPDF.config;
2023-07-01 22:18:49 +01:00
2023-06-29 21:51:08 +01:00
import java.util.List;
2023-05-01 21:57:48 +01:00
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
2023-06-29 21:51:08 +01:00
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Arrays;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
2023-05-01 21:57:48 +01:00
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
2023-06-29 21:51:08 +01:00
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
2023-05-01 21:57:48 +01:00
2023-07-01 22:18:49 +01:00
public class CleanUrlInterceptor implements HandlerInterceptor {
2023-06-29 21:51:08 +01:00
2023-07-01 22:18:49 +01:00
private static final List<String> ALLOWED_PARAMS = Arrays.asList("lang", "endpoint", "endpoints");
2023-05-01 21:57:48 +01:00
2023-07-01 22:18:49 +01:00
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String queryString = request.getQueryString();
if (queryString != null && !queryString.isEmpty()) {
String requestURI = request.getRequestURI();
2023-05-01 21:57:48 +01:00
2023-07-01 22:18:49 +01:00
Map<String, String> parameters = new HashMap<>();
2023-06-29 21:51:08 +01:00
2023-07-01 22:18:49 +01:00
// Keep only the allowed parameters
String[] queryParameters = queryString.split("&");
for (String param : queryParameters) {
String[] keyValue = param.split("=");
if (keyValue.length != 2) {
continue;
}
if (ALLOWED_PARAMS.contains(keyValue[0])) {
parameters.put(keyValue[0], keyValue[1]);
}
}
2023-05-01 21:57:48 +01:00
2023-07-01 22:18:49 +01:00
// If there are any parameters that are not allowed
if (parameters.size() != queryParameters.length) {
// Construct new query string
StringBuilder newQueryString = new StringBuilder();
for (Map.Entry<String, String> entry : parameters.entrySet()) {
if (newQueryString.length() > 0) {
newQueryString.append("&");
}
newQueryString.append(entry.getKey()).append("=").append(entry.getValue());
}
2023-05-01 21:57:48 +01:00
2023-07-01 22:18:49 +01:00
// Redirect to the URL with only allowed query parameters
String redirectUrl = requestURI + "?" + newQueryString;
response.sendRedirect(redirectUrl);
return false;
}
}
return true;
}
2023-05-01 21:57:48 +01:00
2023-07-01 22:18:49 +01:00
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) {
}
2023-05-01 21:57:48 +01:00
2023-07-01 22:18:49 +01:00
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
}
2023-05-01 21:57:48 +01:00
}