У меня есть веб-приложение 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()
или чего-то еще, но это чувствуетсякак плохой хак.