При выходе из системы только перенаправление на страницу ссылки, если страница доступна без аутентификации - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу реализовать LogoutSuccessHandler, который перенаправляет текущего пользователя на последнюю страницу ( referer ), но только если страница referer не защищена!

В настоящее время мой LogoutSuccessHandler перенаправляет пользователяна предыдущую страницу, может ли вышедший из системы пользователь получить доступ к этой странице или нет.Это иногда приводит к проблеме, когда пользователь получает прямое перенаправление на страницу входа.Если реферер указывает на защищенную страницу, пользователя следует перенаправить на страницу индекса / приветствия моего веб-приложения.

Моя текущая реализация выглядит следующим образом:

@Component
public class MyLogoutSuccessHandler implements LogoutSuccessHandler {

    @Override
    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
        String referer = request.getHeader("referer");
        if (referer == null) {
            referer = "/";
        }
        response.sendRedirect(refererUrl);
    }

}

То, что я пробовал, но не работает:

@Component
public class MyLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler {

@Autowired
private WebInvocationPrivilegeEvaluator webInvocationPrivilegeEvaluator;

@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
    super.onLogoutSuccess(request, response, authentication);
    String refererUrl = request.getHeader("referer");
    if (webInvocationPrivilegeEvaluator.isAllowed(refererUrl, authentication)) {
        response.sendRedirect(refererUrl);
    } else {
        response.sendRedirect(request.getContextPath()); 
    }
}

Проблемы с этим подходом:

  1. webInvocationPrivilegeEvaluator имеет значение null
  2. Объект аутентификации по-прежнемуданные пользователя и контекст безопасности, несмотря на то, что пользователь вышел из системы.Я предположил, что объект аутентификации является нулевым или относится к анонимному пользователю.Так что даже # 1 не будет нулевым, мой подход все равно не будет работать, потому что объект аутентификации все еще содержит данные после выхода из системы, что означает, что пользователь будет перенаправлен на защищенную страницу, а затем прямо на страницу входа.

Так кто-нибудь знает, как достичь моей цели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...