У меня очень простое приложение со страницей входа, домашней страницей.
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
...
@Override
protected void configure(HttpSecurity http) throws Exception {
http.
authorizeRequests()
.antMatchers("/h2-console").permitAll()
.antMatchers("/h2-console/**").permitAll()
.antMatchers("/h2-console/login.do").permitAll()
.antMatchers("/login").permitAll()
.antMatchers("/registration").permitAll()
.antMatchers("/admin/**").permitAll()
.anyRequest()
.authenticated().and().csrf().disable().formLogin()
.loginPage("/login").failureUrl("/login?error=true")
.defaultSuccessUrl("/home", true)
.usernameParameter("email")
.passwordParameter("password")
.and().logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/").and().exceptionHandling()
.accessDeniedPage("/access-denied");
http.csrf().disable();
http.headers().frameOptions().disable();
}
...
}
и контроллер home / login:
@RequestMapping(value={"/", "/login"}, method = RequestMethod.GET)
public ModelAndView login(){
if(isLogged()){
ModelAndView modelAndView = new ModelAndView();
...
modelAndView.setViewName("home");
return modelAndView;
}else{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("login");
return modelAndView;
}
}
}
Все хорошо. Логин работает! Выйти работает! Отображение домашней страницы работает тоже!
НО: если я нахожусь на странице администратора и я попытаюсь изменить URL-адрес, например host: port / У меня ошибка 404! Это только происходит, когда Я вошел в систему ! а знаешь что? Это происходит только тогда, когда я развертываю военное приложение в Tomcat. Это действительно очень странно. ПОТОМУ ЧТО, если я запускаю приложение без tomcat (просто запустите основное приложение), все в порядке!
Подводя итог:
- На localhost все нормально
- У меня проблемы только на tomcat
- Проблема отображения домашней страницы появляется только тогда, когда пользователь вошел в систему и приложение запущено в tomcat.
- Если пользователь не вошел в систему, отображение домашней страницы работает очень хорошо. Даже на коте! . Но если пользователь вошел в систему, "/" mapping
Подробнее о применении:
apply plugin: 'war'
...
buildscript {ext {springBootVersion = '2.1.3.RELEASE'} ... }
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile("org.springframework.boot:spring-boot-starter-web") ;
compile("org.springframework.boot:spring-boot-starter-security")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
}
и основное применение:
@SpringBootApplication
public class SpringLauncher extends SpringBootServletInitializer implements CommandLineRunner {
public static void main(String args[]) {
SpringApplication app = new SpringApplication(SpringLauncher.class);
app.run(args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringLauncher.class);
}
@Override
public void run(String... strings) throws JsonProcessingException {
logger.info("Application is staging up");
...
}
Есть идеи? почему отображение "/" не найдено при входе пользователя в систему? И почему это только на tomcat?