Проблема безопасности Springboot при развертывании войны на tomcat
У меня есть приложение Springboot, которое я могу запускать локально без проблем с аутентификацией. Однако, когда я запускаю эту сборку в WAR и на сервере tomcat, поведение отличается.
Кажется, что цепочка фильтров не срабатывает, может ли кто-нибудь мне помочь?
Например, у меня есть следующий HelloController:
@RestController
@RequestMapping("/api/hello")
public class HelloController {
@GetMapping("/hi")
public String hello() {
return "hi";
}
@GetMapping("/bye")
@PreAuthorize("hasRole('USER')")
public String bye() {
return "bye";
}
}
И WebSecurityConfig следующим образом:
@EnableWebSecurity
@Configuration
public class WebSecurityConfig
{
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable()
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authorizeRequests().antMatchers("/api/auth/**").permitAll()
.antMatchers("/api/hello/**").permitAll()
.anyRequest().authenticated();
http.authenticationProvider(authenticationProvider());
http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
return http.build();
}
}
Итак, когда я вызываю конечную точкуlocalhost:8080/api/hello/hi
он возвращается с приветом, как и ожидалось (потому что он общедоступный).
Когда я вызываю эту конечную точку при развертывании на tomcat, она дает мне:Full authentication is required to access this resource
--редактировать 1--
Когда я комментирую SecurityFilterChain, это не имеет значения. Я думаю, что он не правильно настроен...
-- изменить 2 --
Я использую spring-boot 2.7.5 и tomcat 8.5.
Я что-то забыл? Заранее спасибо!