Giter Site home page Giter Site logo

api-rest-com-spring-security-bootcamp-dio-quebec-'s Introduction

Autenticação Simples

MÉTODO 1

  • Desabilitando a geração aleatória para o 'user' No 'application.properties' incluímos as linhas:
    spring.security.user.name=usuario
    spring.security.user.password=123.usuario
    spring.security.user.roles=USERS  

MÉTODO 2

  • Em memória (permite criar mais de 1 usuário e perfis) Para isso criamos uma classe que extenda de WebSecurityConfigurerAdapter e no método configure(AuthenticationManagerBuilder auth) criamos nossos usuários/roles e gerenciamos nossas autenticações.

    Após podemos configurar nossas rotas nos controllers com as annotations @PreAuthorize("hasAnyRole('ADMINISTRADORES', 'USERS')") gerenciando assim quais roles podem ter acesso ao recurso.

MÉTODO 3

  • Usando o Configure Adapter para configurar o acesso as rotas fora dos controllers, para isso sobescrevemos o método configure(HttpSecurity http).

MÉTODO 4

  • Usando BD para persistência dos 'usuario' e 'roles'. Para isso usamos o starter do JPA, incluindo as linhas abaixo no pom.xml
    <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    Após definimos nosso modelo de usuário (class @Entity) Após criamos nosso repositório do usuário (interface que extende JPARepository c/ @Repository) Após criamos um serviço (class SecurityDatabaseService que implementa UserDetailsService com a implementação do método loadUserByUsername(String username) ) que trata-rá da transferência do usuário e seus detalhes armazezados para o Spring Security Desfazemos o método 2 em WebSecurityConfig Ainda WebSecurityConfig incluímos as linhas abaixo
      @Autowired
      private SecurityDatabaseService securityDatabaseService;
    
      @Autowired
      private void globalUserDetails(AuthenticationManagerBuilder auth) throws Exception{
          auth.userDetailsService(securityDatabaseService)
                  .passwordEncoder(NoOpPasswordEncoder.getInstance());
      }
    além de modifica a linha comentada pela de baixo:
    ...
                  .antMatchers("/usuarios").hasAnyRole("ADMINISTRADORES", "USERS")
    // -->        .anyRequest().authenticated().and().formLogin(); --> mudada para usar BD
                  .anyRequest().authenticated().and().httpBasic();
    }
    Como nosso BD não estará populado, pois será usado um BD em memória, criamos a classe CarregaUsuariosBDSecurityque implementa CommandLineRunner e seu método run para popular a tabela 'Usuario' E por fim, incluímos a dependência abaixo para termos um BD H2 na aplicação:
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <scope>runtime</scope>
    </dependency>
    MÉTODO 5
    • Usando o JWT - JSON Web Token
    • Incluída a dependência
     <dependency>
         <groupId>io.jsonwebtoken</groupId>
         <artifactId>jjwt</artifactId>
         <version>0.9.1</version>
     </dependency>
    • Criamos um service do Usuário como método que cria um usuário c/ a senha criptografada para salvar no BD
    • Criamos as classes:
      • JWTObject
      • JWTCreator
      • JWTFilter
      • SecurityConfig
    • Criamos ainda as DTOs:
      • Login e Sessao

api-rest-com-spring-security-bootcamp-dio-quebec-'s People

Contributors

marcelojssantos avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.