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étodoconfigure(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
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<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
SecurityDatabaseService
que implementaUserDetailsService
com a implementação do métodoloadUserByUsername(String username)
) que trata-rá da transferência do usuário e seus detalhes armazezados para o Spring Security Desfazemos o método 2 emWebSecurityConfig
AindaWebSecurityConfig
incluímos as linhas abaixoalém de modifica a linha comentada pela de baixo:@Autowired private SecurityDatabaseService securityDatabaseService; @Autowired private void globalUserDetails(AuthenticationManagerBuilder auth) throws Exception{ auth.userDetailsService(securityDatabaseService) .passwordEncoder(NoOpPasswordEncoder.getInstance()); }
Como nosso BD não estará populado, pois será usado um BD em memória, criamos a classe... .antMatchers("/usuarios").hasAnyRole("ADMINISTRADORES", "USERS") // --> .anyRequest().authenticated().and().formLogin(); --> mudada para usar BD .anyRequest().authenticated().and().httpBasic(); }
CarregaUsuariosBDSecurity
que implementaCommandLineRunner
e seu métodorun
para popular a tabela 'Usuario' E por fim, incluímos a dependência abaixo para termos um BD H2 na aplicação:MÉTODO 5<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency>
- 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