Olá Ailton!
Obrigado por compartilhar sua dúvida conosco! É possível sim trabalhar com autenticação stateless e stateful na mesma aplicação Spring Boot com Spring MVC. Para fazer isso, você precisará configurar o Spring Security para reconhecer tanto as sessões quanto os tokens JWT.
Uma maneira de fazer isso é criar dois filtros de segurança diferentes: um para a autenticação stateful e outro para a autenticação stateless. O filtro de autenticação stateful seria responsável por gerenciar as sessões e o filtro de autenticação stateless seria responsável por validar os tokens JWT.
Para configurar o filtro de autenticação stateful, você pode usar a classe SessionManagementConfigurer
do Spring Security. Para configurar o filtro de autenticação stateless, você pode usar a classe JwtConfigurer
do Spring Security.
Aqui está um exemplo de como você pode configurar o Spring Security para trabalhar com autenticação stateful e stateless na mesma aplicação:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtTokenProvider jwtTokenProvider;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/public/**").permitAll()
.anyRequest().authenticated()
.and()
.apply(new SessionManagementConfigurer<HttpSecurity>()
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED))
.and()
.apply(new JwtConfigurer(jwtTokenProvider));
}
// Outras configurações de segurança aqui...
}
Observe que o método configure
está configurando o Spring Security para permitir o acesso a todas as URLs que começam com /api/public/
sem autenticação. Isso significa que essas URLs serão acessíveis sem a necessidade de um token JWT. Todas as outras URLs exigirão autenticação.
Espero ter ajudado e bons estudos!