Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Implementei as Security Configurations e o H2 parou de funcionar

Bom dia pessoal!

Ao implementar a segurança na API, o h2 está pedindo login e senha para funcionar (uso o IntelliJ e preciso ficar alimentando o banco para os testes).

Ocorre que o spring só me forneceu a senha. Como devo proceder nesse caso?

6 respostas

Oi Renato,

Dá uma olhadinha nesse tópico que explico como liberar o console do H2 para acesso: https://cursos.alura.com.br/forum/topico-erro-acesso-ao-h2-87746

Bom dia professor!

Na verdade minha dúvida era já no primeiro momento quando implementamos a segurança. Lá o h2 já acaba perdendo o acesso. Mas acabei optando por continuar o curso assim mesmo e testar agora após implementar o JWT. Inclui o código sugerido, no entanto, ele apresenta duas reclamações. Na linha ".and().addFilterBefore(new AutenticacaoFilter(tokenService, autenticacaoService), UsernamePasswordAuthenticationFilter.class)" AutenticacaoFilter e tokenService ficam em vermelho. Será que preciso criar ou importar algo? Segue o código inteiro para análise:

package com.ganske.forum.config.security;

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.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

@EnableWebSecurity
@Configuration
public class SecurityConfigurations extends WebSecurityConfigurerAdapter {

    @Autowired
    private AutenticacaoService autenticacaoService;

    @Override
    @Bean
    protected AuthenticationManager authenticationManager() throws Exception {
        return super.authenticationManager();
    }

    //Configuracoes de Autenticacao
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth.userDetailsService(autenticacaoService).passwordEncoder(new BCryptPasswordEncoder());

    }

    //Configuracoes de Autorizacao
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests()
                .antMatchers(HttpMethod.GET, "/topicos").permitAll()
                .antMatchers(HttpMethod.GET, "/topicos/*").permitAll()

                .antMatchers("/h2-console/**").permitAll()
                    .anyRequest().authenticated()
                    .and().csrf().disable()
                    .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                    .and().headers().frameOptions().sameOrigin()
                    .and().addFilterBefore(new AutenticacaoFilter(tokenService, autenticacaoService), UsernamePasswordAuthenticationFilter.class)

;
    }

    //Configuracoes de Recursos Estaticos(JS, Css, imgs, etc)
    @Override
    public void configure(WebSecurity web) throws Exception {

    }

    public static void main(String[] args) {
        System.out.println(new BCryptPasswordEncoder().encode("123456"));
    }
}

Posta aqui também o código da sua classe AutenticacaoFilter

Essa classe não está criada ainda, vou seguir mais um pouco do curso então!

Olá professor!

Segui o curso e cheguei na fase de implementação dos filtros. Os erros saíram, mas agora estou perdido de como proceder para fazer os testes. Desde a implementação da primeira parte da segurança (capítulo 3), não consigo mais fazer os testes porque o H2 ficou "bloqueado". No entanto, agora com o curso mais avançado, estou perdido na sequência que devo proceder, para conseguir fazer os devidos testes.

É importante lembrar que, como usarei o IntelliJ no trabalho, estou trabalhando com esse IDE, então os acessos ao H2 e a carga de dados nele, é toda feito pelo próprio H2, o qual estou sem acesso ainda.

solução!

Oi Renato,

Então, os dados iniciais são inseridos no h2 pelo arquivo data.sql e depois mais informações podem ser inseridas pela própra API, com ostestes via Postman.

O bloqueio seria apenas para acessar diretamente o banco de dados h2.