Profesosr, tudo bom?
Eu consegui implementar a solução do login, porém quando tento acessar o banco pelo h2 (banco que escolhi) ele apresenta o seguinte erro:
O senhor poderia me ajudar?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Profesosr, tudo bom?
Eu consegui implementar a solução do login, porém quando tento acessar o banco pelo h2 (banco que escolhi) ele apresenta o seguinte erro:
O senhor poderia me ajudar?
Olá, poderia postar o seu código da classe SecurityConfigurations, para que eu possa analisar?
Mas já adianto, que possivelmente você possa ter se esquecido de adicionar o h2-console na lista de urls liberadas para acesso.
no metodo onde você autoriza acesso a sua api sem estar autentica é necessario que tenha a url "/h2-console" permitida
httpSecurity.authorizeRequests()
.antMatchers(HttpMethod.GET, "/h2-console/**").permitAll()
.antMatchers(PUBLIC_MATCHERS).permitAll().anyRequest().authenticated();
httpSecurity.addFilter(new JWTAutheticationFilter(authenticationManager(), jwtUtil));
httpSecurity.addFilter(new JWTAuthorizationFilter(authenticationManager(), jwtUtil, userDetailsService));
httpSecurity.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
Olá tudo bom?
Segue meu código da classe, obrigado;
package itau.canais.api.modules.produto.config;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
@Configuration @EnableWebSecurity public class SecurityConfigurations {
@Autowired
private SecurityFilter securityFilter;
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{
return http
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().authorizeHttpRequests()
.requestMatchers(HttpMethod.POST, "/login").permitAll()
.anyRequest().authenticated()
.and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
.build();
}
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception{
return configuration.getAuthenticationManager();
}
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}}
Tente o seguinte
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{
return http
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().authorizeHttpRequests()
.requestMatchers(HttpMethod.POST, "/login").permitAll()
.antMatchers(HttpMethod.GET, "/h2-console/**").permitAll()
.anyRequest().authenticated()
.and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
.build();
}
Adicionei a seguinte linha
.antMatchers(HttpMethod.GET, "/h2-console/**").permitAll()no seu metodo securityFilterChain, com essa linha estou dizendo que é permitido a chamada da url h2-console com o metodo GET sem estar autenticado na aplicação.
Pode testar e me informar se funcionou?
Olá eu fiz a troca pelo .requestMatchers(HttpMethod.GET, "/h2-console/**").permitAll(), visto que o spring 3.0.0 não aceita mais o antMtchers.
Mas não surtiu efeito.
Gerei o token, após o login, e inseri porém ainda apresenta o erro 403
Marco desculpe a sumida, no projeto que estou montando, resolvi dar um tempo com segurança e ir para a simulação de front, voltei ontem com a segurança.
Tentei fazer o que sugeriu e continua dando o 403, tanto que não acesso o h2-console no navegador, como também a pagina index de login. Meu código
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{
return http
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().authorizeHttpRequests()
.requestMatchers(HttpMethod.POST, "/login").permitAll()
.requestMatchers(HttpMethod.GET, "/h2-console/**").permitAll()
.anyRequest().authenticated()
.and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
.build();
}
Oi Lúcio!
Para liberar o h2 você precisa de duas configurações:
.requestMatchers("/h2-console/**").permitAll()
.and().headers().frameOptions().sameOrigin()Bons estudos!
Professor a minha classe tem que ficar assim?
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{
return http
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().authorizeHttpRequests()
.requestMatchers("/**", "/login", "/h2-console/**").permitAll()
.and().headers().frameOptions().sameOrigin()
.and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
.build();
}