Как перенаправить после входа в Spring Security только для определенных случаев? - PullRequest
0 голосов
/ 30 июня 2019

Я хочу, чтобы моя страница входа перенаправлялась на другую, если в URL указан параметр forward.В противном случае я хочу, чтобы он перенаправлял туда, куда хотел пойти пользователь.

Итак, скажем, у меня есть маршрут /print, который защищен.Когда пользователь нажимает какую-то кнопку, я вручную перенаправляю его на этот URL

http://localhost:8080/login?forward=print?p=5d1666a775d2f02064dcdf06

, потому что, если он выберет Sign Up на экране входа в систему, я могу вспомнить, куда он направлялся изначально.

Поэтому я настроил AuthenticationSuccessHandler

@Bean
open fun authenticationSuccessHandler(): AuthenticationSuccessHandler {
    val redirectStrategy = DefaultRedirectStrategy()
    return AuthenticationSuccessHandler { request, response, _ -> redirectStrategy.sendRedirect(request, response, request.getParameter("forward")) }
}

Но теперь, если пользователь просто вводит этот URL-адрес без входа в систему,

http://localhost:8080/print?p=5d1666a775d2f02064dcdf06

Spring Security перенаправляет его на страницу входа и послелогин, мой AuthenticationSuccessHandler перенаправляет его на домашнюю страницу, так как параметр forward отсутствует.Я могу проверить, существует ли параметр или нет, но не знаю, куда перенаправить, если параметр отсутствует.Другими словами

@Bean
open fun authenticationSuccessHandler(): AuthenticationSuccessHandler {
    val redirectStrategy = DefaultRedirectStrategy()
    return AuthenticationSuccessHandler{ request, response, _ -> 
        if(!request.getParameter("forward").isNullOrEmpty()) {
            redirectStrategy.sendRedirect(request, response, request.getParameter("forward"))
        }else {
            //TODO
        }
    }
}

что я должен написать вместо моего TODO?

Или, может быть, есть какой-то элегантный способ сохранить исходное состояние того, куда пользователь хотел пойти, когда яперенаправить его со страницы входа на страницу регистрации?

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