Создайте приложение Spring mvc, которое перенаправляет каждый запрос обратно на предыдущий URL после аутентификации. - PullRequest
0 голосов
/ 04 мая 2018

Я сделал простое аутентифицированное приложение, которое имело недостаток, что всякий раз, когда любой человек пытается посетить защищенную ссылку, такую ​​как "https://www.example.com/orders.spr",, он перенаправляет пользователя на страницу входа для аутентификации, но после аутентификации пользователь будет Перенаправление на домашнюю страницу. Как я могу сделать свое следующее приложение настолько надежным, чтобы пользователь оставался на том же URL-адресе после аутентификации? Что мне нужно знать, так это то, как поймать анонимных пользователей в весенней безопасности, как перенаправить пользователя на ту же страницу после аутентификация, и как увеличить время ожидания сеанса до 1 часа, чтобы пользователь мог получить доступ к URL-адресу в течение определенного времени. Любой пример, учебник или код приветствуется.
Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 07 мая 2018

Spring Security предоставляет компонент, который несет прямую ответственность за решение, что делать после успешной аутентификации - AuthenticationSuccessHandler:

Возможно, приведенный ниже код поможет вам понять последовательность задач:

 public class MySimpleUrlAuthenticationSuccessHandler
  implements AuthenticationSuccessHandler {
  
    protected Log logger = LogFactory.getLog(this.getClass());
 
    private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
 
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, 
      HttpServletResponse response, Authentication authentication)
      throws IOException {
  
        handle(request, response, authentication);
        clearAuthenticationAttributes(request);
    }
 
    protected void handle(HttpServletRequest request, 
      HttpServletResponse response, Authentication authentication)
      throws IOException {
  
        String targetUrl = determineTargetUrl(authentication);
 
        if (response.isCommitted()) {
            logger.debug(
              "Response has already been committed. Unable to redirect to "
              + targetUrl);
            return;
        }
 
        redirectStrategy.sendRedirect(request, response, targetUrl);
    }
 
    protected String determineTargetUrl(Authentication authentication) {
        boolean isUser = false;
        boolean isAdmin = false;
        Collection<? extends GrantedAuthority> authorities
         = authentication.getAuthorities();
        for (GrantedAuthority grantedAuthority : authorities) {
            if (grantedAuthority.getAuthority().equals("ROLE_USER")) {
                isUser = true;
                break;
            } else if (grantedAuthority.getAuthority().equals("ROLE_ADMIN")) {
                isAdmin = true;
                break;
            }
        }
 
        if (isUser) {
            return "/homepage.html";
        } else if (isAdmin) {
            return "/console.html";
        } else {
            throw new IllegalStateException();
        }
    }
 
    protected void clearAuthenticationAttributes(HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        if (session == null) {
            return;
        }
        session.removeAttribute(WebAttributes.AUTHENTICATION_EXCEPTION);
    }
 
    public void setRedirectStrategy(RedirectStrategy redirectStrategy) {
        this.redirectStrategy = redirectStrategy;
    }
    protected RedirectStrategy getRedirectStrategy() {
        return redirectStrategy;
    }
}

Наиболее распространенные способы реализации логики перенаправления после входа в систему:

  • с использованием заголовка HTTP Referer

  • сохранение исходного запроса в сеансе

  • добавление исходного URL-адреса к перенаправленному URL-адресу входа в систему

    в этом и этом статьях, которые вы можете увидеть более подробно о безопасности пружины:

0 голосов
/ 04 мая 2018

Вы можете использовать куки для этой цели. Таким образом, в основном с какой страницы ваша аутентификация не удалась, вы можете сохранить их в cookie, а после аутентификации вы можете перенаправить на этот предыдущий URL.

Кроме того, вы можете иметь и это.

http://www.baeldung.com/spring_redirect_after_login

0 голосов
/ 04 мая 2018

Для этого можно использовать SavedRequestAwareAuthenticationSuccessHandler в качестве обработчика успеха аутентификации.

На странице api doc можно найти следующее описание:

Стратегия успеха аутентификации, которая может использовать DefaultSavedRequest, который мог быть сохранен в сеансе ExceptionTranslationFilter. Когда такой запрос перехватывается и требует аутентификации, данные запроса сохраняются для записи исходный пункт назначения до начала процесса аутентификации, и разрешить восстановление запроса при перенаправлении на тот же URL встречается. Этот класс отвечает за выполнение перенаправления на исходный URL, если необходимо.

Ключевым моментом является . Данные запроса сохраняются для записи исходного пункта назначения до начала процесса аутентификации и для возможности восстановления запроса при перенаправлении на тот же URL-адрес.

Я использовал этот успех в своем проекте, и вы можете попробовать, чтобы использовать его, вам нужно расширить его, как показано ниже:

public class CustomAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler{

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,HttpServletResponse response, Authentication authentication)
                throws IOException, ServletException {
            //...other code

            super.onAuthenticationSuccess(request, response, authentication);

        }

}
0 голосов
/ 04 мая 2018

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

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