Как получить оригинальный пункт назначения в калитке

Как получить исходный пункт назначения в калитке, например: я нажал одну ссылку на странице, но затем она перенаправилась на страницу входа в систему, так как она требует аутентификации, но мне нужно знать в коде Java, каков исходный пункт назначения (ссылка, по которой я щелкнул ранее логин), так как я должен применить некоторые проверки (для этой конкретной ссылки).

1 ответ

Вы можете установить переменную сеанса по ссылке, как показано ниже:

      HttpServletRequest request = (HttpServletRequest) getWebRequest().getContainerRequest();
        request.getSession().setAttribute("linkclicked", "linkname");

Затем в вашем приложении Wicket добавьте Request Listener, чтобы прочитать переменную сеанса, сохраненную выше, и создать PageParameter для страницы входа. Перенаправить пользователя на страницу входа с предоставленным PageParameter. При успешном входе в систему вы можете получить это значение параметра и выполнить проверку перед вызовом метода gotoOriginalDestinationPage.

Прослушиватель запроса может быть как ниже. Я не пробовал, но должно работать нормально.

getRequestCycleListeners().add(
            new AbstractRequestCycleListener()
            {
                public void onBeginRequest(RequestCycle cycle)
                {
                    if( cycle.getRequest().getContainerRequest() instanceof HttpServletRequest)
                    {
                        HttpServletRequest containerRequest =
                                (HttpServletRequest)cycle.getRequest().getContainerRequest();

                        String linkClicked = (String) containerRequest.getSession().getAttribute("linkclicked");
                        PageParameters parameters = new PageParameters();
                        parameters.add("link", linkClicked);

                        cycle.setResponse(new LoginPage(parameters));
                    }
                };
            }
    );

Вы можете использовать component.continueToOriginalDestination() после успешного входа в систему.

  /**
     * @param component
     */
    protected void gotoOriginalDestinationPage(Component component) {
        component.continueToOriginalDestination();
        //If there was no interceptor page, so we reached here. In this case, go to home page.
        setResponsePage(GarbageApp.get().getHomePage());
    }

Если предположить, что ваша страница входа - LoginPage.java, то внутри onSubmit формы / кнопки вы можете вызвать вышеуказанный метод как gotoOriginalDestinationPage(this);

Другие вопросы по тегам