Spring referer является нулевым в логине и не будет перенаправлять - PullRequest
1 голос
/ 21 мая 2019

У меня есть приложение Spring-boot, которое использует безопасность. Я хочу перенаправить на исходный запрошенный URL. Мне нужно было реализовать собственный SimpleUrlAuthenticationSuccessHandler, поэтому у меня есть этот код:

public class MySavedRequestAwareAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {

public MySavedRequestAwareAuthenticationSuccessHandler() {
    setUseReferer(true);
}

@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {

// do my stuff

            logger.info(getTargetUrlParameter()); // this is = '/'
            //logger.info(getDefaultTargetUrl()); // this is null
            redirectStrategy.sendRedirect(request, response, "/");
}
}

Проблема в том, что после входа в систему никогда не происходит перенаправление на реферер. Мне пришлось добавить redirectStrategy.sendRedirect (запрос, ответ, "/"); часть.

В LoginController значение «Referer» в заголовке всегда равно нулю, если оно перенаправлено из весенней защиты. Если я добавлю URL «xxxx / login», значение будет установлено. Не очень полезно:

@RequestMapping(value = {"/login"}, method = RequestMethod.GET)
public ModelAndView login(HttpServletRequest request) {       

    String referer = request.getHeader("Referer");
    modelAndView.addObject ("referer", referer); // this is NULL
    //
    modelAndView.setViewName("login");
    return modelAndView;
}

Это моя конфигурация безопасности:

http.authorizeRequests()
                .antMatchers("/login").permitAll()
                .antMatchers("/").authenticated()               
                .and()
                .csrf().disable()
                .formLogin()
                .loginPage("/login")
                .failureHandler(customAuthenticationFailureHandler)
                .usernameParameter("email")
                .passwordParameter("password")
                .successHandler(authenticationSuccessHandler)
                .and()
                .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login?logged-out")
                .and()
                .exceptionHandling()
                .accessDeniedPage("/access-denied")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...