У меня есть приложение Spring Boot с Spring Security. На базовом уровне он в значительной степени соответствует тому, что было в учебнике Spring. Мой вопрос в том, что когда я попадаю на домашнюю страницу, он вызывает контроллер входа в систему (дважды). Почему? Не совсем очевидно, что он делает это с базовой настройкой, поскольку он просто показывает домашнюю страницу. Но если я добавлю класс LoginController, он будет вызываться (дважды) при загрузке домашней страницы. Другой способ убедиться в этом — добавить недопустимый тег тимелеафа в шаблон login.html, он выдаст ошибку, даже если домашняя страница не должна быть аутентифицирована. Любое объяснение будет полезным.
Мой код:
Заявление:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Конфигурация веб-безопасности:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}
Домашний контроллер:
@Controller
public class HomeController {
@RequestMapping(value="/", method=RequestMethod.GET)
public String getHomePage(Model model) {
return "home";
}
}
Необязательный LoginController будет вызываться при переходе на домашнюю страницу:
@Controller
public class LoginController {
@RequestMapping(value="/login", method=RequestMethod.GET)
public String getLoginPage(Model model) {
return "login";
}
}