Получить красивый URL-адрес от HttpServletRequest - PullRequest
2 голосов
/ 14 октября 2019

Я использую org.omnifaces.filter.HttpFilter для перенаправления посетителей на страницу входа, когда никто не вошел в систему.

@Override
public void doFilter(HttpServletRequest req, HttpServletResponse res, HttpSession session, FilterChain chain) throws ServletException, IOException {
    String loginUrl = "/myapp/login?redirect_url=" + req.getRequestURL();
    boolean loggedIn = (req.getRemoteUser() != null);
    if (loggedIn) {
        chain.doFilter(req, res); // So, just continue request.
    } else {
        Servlets.facesRedirect(req, res, loginUrl);
    }
}  

Я хочу перенаправить не вошедших в систему пользователей на /login?redirect_url=previous_page_url

Проблема в том, что все мои URL-адреса украшены симпатичными лицами , и когда я пытаюсь получить предыдущий URL-адрес с помощью HttpServletRequest.getRequestURI(), он дает мне ужасный URL-адрес.

Например, я настроил URL /myapp/my-page-3, который отображает /views/module1/page3.xhtml.

Но HttpServletRequest.getRequestURI() дает мне /views/module1/page3.xhtml и не /myapp/my-page-3.

Есть идеи?

1 Ответ

4 голосов
/ 14 октября 2019

Когда механизм перезаписи URL на основе сервлета использует под обложками RequestDispatcher#forward() для пересылки входящего запроса дружественного URL-адреса на нужный ресурс, вы можете использовать request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI), чтобы узнать URI исходного запроса.

String originalRequestURI = request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI);

Поскольку вы уже используете OmniFaces, вы можете использовать Servlets#getRequestURI(), чтобы автоматически обнаруживать его и возвращать, когда он присутствует, иначе вернитесь к значению по умолчанию HttpServletRequest#getRequestURI().

String requestURI = Servlets.getRequestURI(request);
...