В моем проекте «Spring» я установил целевой URL-адрес выхода на «log logout» для отображения страницы входа с сообщением «Вы вышли из системы».Почему/login? Logout перенаправляет/login?
В конфигурации Spring Security, я сделал это:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/error").permitAll()
.anyRequest().fullyAuthenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.successHandler(loginSuccessHandler)
.failureUrl("/login?error")
.and()
.httpBasic()
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.permitAll()
.logoutSuccessHandler(logoutSuccessHandler);
}
И logoutSuccessHandler:
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
if (authentication != null) {
Log.debug(authentication.getName() + " LOGOUT !!");
}
setDefaultTargetUrl("/login?logout");
super.onLogoutSuccess(request, response, authentication);
}
Когда я пытаюсь выйти, я приезжаю на странице "/ Логин" (без ?выйти). Я не понимаю, почему он перенаправляет меня на этой странице.
Я думаю, что приложение пытается перенаправить меня на «/ login? Logout», но поскольку я больше не подключен, Spring Security хочет, чтобы я снова зашел в систему.
Когда я пытаюсь войти на страницу входа/выхода «log log» во время входа в систему, отображается хорошая страница.
Я нашел решение этой проблемы путем добавления этого:
.authorizeRequests()
.antMatchers("/error","/login").permitAll()
loginPage("/login").permitAll()
Почему не сделать это? Я сделал что-то не так?
Наиболее отлично - мне удалось выяснить, большинство из этого, ползая по коду, но мне не хватало 'SecurityConfigurerAdapter'. Спасибо за ваш ответ, и мы увидим о щедрости через пару дней. –
Хорошо - но есть Catch 22! Если задать пользовательский обработчик, Spring _resets_ URL. Если задать настраиваемый URL, Spring сбрасывает обработчик. Итак, в то время как «SecurityConfigurerAdapter» полезен; нет (если я что-то не упускаю), способ иметь пользовательский, скажем, обработчик ошибок, и иметь Spring автоматически сконфигурировать 'allowAll' правильно. Кроме того,' ExactUrlRequestMatcher' используется 'private', поэтому нельзя даже что-то сделать аналогично вручную ... –
API ужасно хрупок, но я не уверен точно, о чем вы просите. Можете ли вы опубликовать свой сломанный код, и я попытаюсь решить его как мини-вопрос? Также укажите, если вы пытаетесь использовать 'DefaultLoginPageConfigurer' или у вас есть собственные шаблоны просмотров. – heenenee