Отправка формы с использованием AJAX в Spring Boot - как мне перенаправить на страницу входа, когда сеанс истек? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть веб-приложение Spring Boot.

На одной из страниц - /addScreenSet - есть форма, которая отправляется с использованием Ajax, и результаты отправки этой формы (информация, возвращаемая из внешнего API)отображается внутри <div> на той же странице.

Однако, если сеанс пользователя истек, вызов AJAX перенаправляется (используя некоторую магию Spring Boot, которую я не понимаю) на контроллер /login,и шаблон login.html отображается внутри div на /addScreenSet странице .

Я хочу перенаправить пользователя на login.html вместо рендеринга login.html внутри div.

Я новичок в Spring Boot и существующем кодеэто не мое, так что мне может понадобиться объяснить некоторые концепции Spring.Есть похожие вопросы, но ответы смутно относятся к концепциям Spring Boot, которые я еще не понимаю (это второй день обучения Spring).

WebSecurityConfig.java

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    AuthenticationService authProvider;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers( "/","/css/**","/img/**","/js/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
                .defaultSuccessUrl("/mySites")
                .failureUrl("/login?error")
            .permitAll()
            .and()
            .logout()
            .permitAll();
    }
}

AJAX-вызов

$.ajax({
    type: 'POST',
    url: '/addScreenSet',
    headers: {
        "Content-Type": "application/json",
        "X-CSRF-Token": $('[name="_csrf"]').val()
    },
    data: formData
})
.done(function(response) {
    $(formMessages).append("<p>"+ response + "</p>");
})

LoginController.java

@Controller
public class LoginController {

    @GetMapping("/login")
    public String showLogin(Model model, String error, String logout) {
        if (error != null) {
            model.addAttribute("error", "Incorrect credentials");
        }
        if (logout != null) {
            model.addAttribute("logout", "Logged Out");
        }
        return "login";
    }
}

Имеется контроллер для запросов POST на/addScreenSet, но это никогда не достигается (я установил точку останова, которая никогда не срабатывает).

Примечание: я полагаю, что я мог бы проверить переменную response в вызове AJAX на наличие чего-то в шаблоне login.html, то есть if (response.includes("<!DOCTYPE html>") redirect() или чего-то еще, но это чувствуетсякак плохой хак.

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