Ajax вызов после истечения сеанса не перенаправляет на страницу входа - весенняя загрузка - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу перенаправить на страницу входа, если во время вызова ajax сеанс истек. Я следую инструкциям на этой ссылке , чтобы сделать это, но каждый раз, когда я выполняю ajax вызов с истекшим сроком сеанса, он возвращает страницу входа в систему как часть ответа вместо перенаправления на страницу входа. , это никогда не дает сбоя, и ответ всегда идет на success часть вызова ajax с readyState: 4 и status: 200, и это дает мне ошибку jquery, потому что я ожидаю список, и он возвращает html код для страницы входа.

Мой код указан ниже:

WebSecurityConfig. java

@Override
protected void configure(HttpSecurity http) throws Exception {      

    http.authorizeRequests()
            .antMatchers(URL_LOGIN, "/css/**", "/img/**").permitAll()
            .antMatchers("/admin/**").hasAnyAuthority(authorizedRolesAdmin)
            .antMatchers("/**").hasAnyAuthority(ArrayUtils.addAll(authorizedRolesUser, authorizedRolesAdmin))
                .and()
            .formLogin()
                .loginPage(URL_LOGIN)                   
                .defaultSuccessUrl("/", true)               
                .failureUrl(URL_LOGIN_FAILED)
                .permitAll()
                .and()
            .logout()                   
                .logoutSuccessUrl(URL_LOGOUT)
                .deleteCookies("JSESSIONID")
                .invalidateHttpSession(true)
                .permitAll()
                .and()
            .exceptionHandling()                
                .accessDeniedPage(URL_LOGIN_UNAUTHORIZED)
                .authenticationEntryPoint(new AjaxAwareAuthenticationEntryPoint(URL_LOGIN))
                .and()
            .sessionManagement()
                .maximumSessions(1)
                .expiredUrl(URL_LOGOUT)
                .and()
                .invalidSessionUrl(URL_LOGOUT);
}

AjaxAwareAuthenticationEntryPoint. java

public class AjaxAwareAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {

    public AjaxAwareAuthenticationEntryPoint(String loginFormUrl) {
        super(loginFormUrl);        
    }

    @Override
    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
        String ajaxHeader = request.getHeader("X-Requested-With");
        if ("XMLHttpRequest".equals(ajaxHeader)) {
            response.sendError(HttpServletResponse.SC_FORBIDDEN, "Ajax Request Denied (Session Expired)");
        } else {
            super.commence(request, response, authException);
        }
    }

}

Хотя отладка после истечения сеанса, я заметил, что он даже не входит в: AjaxAwareAuthenticationEntryPoint java class commence метод.

Что мне здесь не хватает?

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