2023-05-01 21:57:48 +01:00
|
|
|
package stirling.software.SPDF.config;
|
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
|
|
|
public class CleanUrlInterceptor implements HandlerInterceptor {
|
|
|
|
|
2023-06-29 21:51:08 +01:00
|
|
|
|
2023-06-29 23:59:15 +01:00
|
|
|
private static final List<String> ALLOWED_PARAMS = Arrays.asList("lang", "endpoint", "endpoints");
|
2023-05-01 21:57:48 +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-06-29 21:51:08 +01:00
|
|
|
Map<String, String> parameters = new HashMap<>();
|
|
|
|
|
|
|
|
// 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-06-29 21:51:08 +01:00
|
|
|
// If there are any other query parameters besides the allowed ones
|
|
|
|
if (parameters.size() > 0) {
|
|
|
|
// 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-06-29 21:51:08 +01:00
|
|
|
// Redirect to the URL with only allowed query parameters
|
|
|
|
String redirectUrl = requestURI + "?" + newQueryString;
|
2023-05-01 21:57:48 +01:00
|
|
|
response.sendRedirect(redirectUrl);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
|
|
|
|
}
|
|
|
|
}
|