Как получить оригинальный пункт назначения в калитке
Как получить исходный пункт назначения в калитке, например: я нажал одну ссылку на странице, но затем она перенаправилась на страницу входа в систему, так как она требует аутентификации, но мне нужно знать в коде 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);