package de.flower.rmt.ui.page.error; import de.flower.common.ui.util.LoggingUtils; import org.apache.wicket.protocol.http.servlet.ForwardAttributes; import org.apache.wicket.request.Request; import org.apache.wicket.request.RequestHandlerStack; import org.apache.wicket.request.http.handler.RedirectRequestHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; /** * Redirects commonly observed old bookmark errors to sensible pages. Avoids displaying 404 page * for users that are too lazy to update their bookmarks. * * @author flowerrrr */ @Component public class PageNotFoundAutoRedirecter { private final static Logger log = LoggerFactory.getLogger(PageNotFoundAutoRedirecter.class); @Resource(name = "page404RedirectMapping") private Map<String, String> redirectMapping = new HashMap<>(); public void checkAutoRedirect(final Request request) { HttpServletRequest servletRequest = (HttpServletRequest) request.getContainerRequest(); ForwardAttributes forwardAttributes = ForwardAttributes.of(servletRequest); String url = redirectMapping.get(forwardAttributes.getServletPath()); if (url != null) { log.info("Redirecting [{}] to [{}]", LoggingUtils.toString(request), url); throw new RequestHandlerStack.ReplaceHandlerException(new RedirectRequestHandler(url), false); } } }