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?
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();
}