diff --git a/exemplos/02-seguranca/pom.xml b/exemplos/02-seguranca/pom.xml
index 7c0b5df..3db60a8 100644
--- a/exemplos/02-seguranca/pom.xml
+++ b/exemplos/02-seguranca/pom.xml
@@ -56,6 +56,24 @@
42.2.8
+
+ io.jsonwebtoken
+ jjwt-api
+ 0.10.5
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ 0.10.5
+ runtime
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ 0.10.5
+ runtime
+
+
diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/DBWebSecurityConfig.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/DBWebSecurityConfig.java
deleted file mode 100644
index a4fecca..0000000
--- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/DBWebSecurityConfig.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package br.com.ifpb.pweb2.securitydemo.config;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.annotation.Order;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
-import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-@ConditionalOnProperty(value = "app.autenticacaoPadrao.tipoAutenticacao", havingValue = "BANCO")
-@Order(5)
-@Configuration
-public class DBWebSecurityConfig extends WebSecurityConfigurerAdapter {
-
- private final UserDetailsService userDetailsService;
-
- private final PasswordEncoder passwordEncoder;
-
- public DBWebSecurityConfig(UserDetailsService userDetailsService, PasswordEncoder passwordEncoder) {
- this.userDetailsService = userDetailsService;
- this.passwordEncoder = passwordEncoder;
- }
-
- @Override
- protected void configure(AuthenticationManagerBuilder auth) throws Exception {
- auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder);
- }
-
-}
diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/InMemoryWebSecurityConfig.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/InMemoryWebSecurityConfig.java
deleted file mode 100644
index 1f220ef..0000000
--- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/InMemoryWebSecurityConfig.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package br.com.ifpb.pweb2.securitydemo.config;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.annotation.Order;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
-import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-@ConditionalOnProperty(value = "app.autenticacaoPadrao.tipoAutenticacao", havingValue = "MEMORIA")
-@Order(5)
-@Configuration
-public class InMemoryWebSecurityConfig extends WebSecurityConfigurerAdapter {
-
-
- private final ApplicationConfig applicationConfig;
-
- private final PasswordEncoder passwordEncoder;
-
- public InMemoryWebSecurityConfig(ApplicationConfig applicationConfig, PasswordEncoder passwordEncoder) {
- this.applicationConfig = applicationConfig;
- this.passwordEncoder = passwordEncoder;
- }
-
-
- @Override
- protected void configure(AuthenticationManagerBuilder auth) throws Exception {
- auth.inMemoryAuthentication()
- .passwordEncoder(passwordEncoder)
- .withUser(applicationConfig.getAutenticacaoPadrao().getLogin())
- .password(passwordEncoder.encode(applicationConfig.getAutenticacaoPadrao().getSenha()))
- .authorities("ROLE_"+applicationConfig.getAutenticacaoPadrao().getPapel());
- }
-
-}
diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConfig.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConfig.java
new file mode 100644
index 0000000..e59034d
--- /dev/null
+++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConfig.java
@@ -0,0 +1,16 @@
+package br.com.ifpb.pweb2.securitydemo.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ConfigurationProperties(prefix="security")
+@Data
+public class SecurityConfig {
+ private String tokenType;
+ private String secret;
+ private String issuer;
+ private String audience;
+ private Long expiration;
+}
diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java
index f97697d..cc9eb67 100644
--- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java
+++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/WebSecurityConfig.java
@@ -1,32 +1,71 @@
package br.com.ifpb.pweb2.securitydemo.config;
-import org.springframework.core.annotation.Order;
+import br.com.ifpb.pweb2.securitydemo.config.jwt.JwtAuthorizationFilter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
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.core.userdetails.UserDetailsService;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.CorsConfigurationSource;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
@EnableWebSecurity
@EnableGlobalMethodSecurity(jsr250Enabled = true, securedEnabled = true, prePostEnabled = true)
/***
* Deve ser carregado por último para garantir que essa configuração será aplicada a todos
*/
-@Order(10)
-public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
+//@Order(10)
+public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
+
+ private final UserDetailsService userDetailsService;
+
+ private final PasswordEncoder passwordEncoder;
+
+ private final SecurityConfig securityConfig;
+
+ public WebSecurityConfig(UserDetailsService userDetailsService, PasswordEncoder passwordEncoder, SecurityConfig securityConfig) {
+ this.userDetailsService = userDetailsService;
+ this.passwordEncoder = passwordEncoder;
+ this.securityConfig = securityConfig;
+ }
+
@Override
protected void configure(HttpSecurity http) throws Exception {
- http.csrf().disable()
+ http.cors().and()
.authorizeRequests()
- .antMatchers("/api/**").authenticated()
.antMatchers("/publico").permitAll()
- .antMatchers("/usuarios").permitAll()
- .and()
- .sessionManagement()
+ .antMatchers("/login").permitAll()
+ .anyRequest().authenticated()
+ .and()
+ .addFilter(new JwtAuthorizationFilter(authenticationManager(), securityConfig))
+ .sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
- .and()
- .httpBasic();
+ .and()
+ .csrf().disable();
+ }
+
+ public void configure(AuthenticationManagerBuilder auth) throws Exception {
+ auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder);
+ }
+
+
+ @Bean
+ public AuthenticationManager getAuthenticationManager() throws Exception {
+ return authenticationManager();
+ }
+
+ @Bean
+ public CorsConfigurationSource corsConfigurationSource() {
+ final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+ source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
+ return source;
}
}
diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthorizationFilter.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthorizationFilter.java
new file mode 100644
index 0000000..eba1bc8
--- /dev/null
+++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthorizationFilter.java
@@ -0,0 +1,82 @@
+package br.com.ifpb.pweb2.securitydemo.config.jwt;
+
+import br.com.ifpb.pweb2.securitydemo.config.SecurityConfig;
+import io.jsonwebtoken.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+public class JwtAuthorizationFilter extends BasicAuthenticationFilter {
+
+ private final SecurityConfig securityConfig;
+
+ public JwtAuthorizationFilter(AuthenticationManager authenticationManager, SecurityConfig securityConfig) {
+ super(authenticationManager);
+ this.securityConfig = securityConfig;
+ }
+
+ @Override
+ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
+ FilterChain filterChain) throws IOException, ServletException {
+ UsernamePasswordAuthenticationToken authentication = getAuthentication(request);
+ if (authentication == null) {
+ filterChain.doFilter(request, response);
+ return;
+ }
+
+ SecurityContextHolder.getContext().setAuthentication(authentication);
+ filterChain.doFilter(request, response);
+ }
+
+ private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) {
+ String token = request.getHeader("Authorization");
+ if (token != null && !token.isEmpty() && token.startsWith("Bearer")) {
+ try {
+ String signingKey = securityConfig.getSecret();
+
+ Jws parsedToken = Jwts.parser()
+ .setSigningKey(signingKey.getBytes())
+ .parseClaimsJws(token.replace("Bearer ", ""));
+
+ String username = parsedToken
+ .getBody()
+ .getSubject();
+
+ List authorities = ((List>) parsedToken.getBody()
+ .get("roles")).stream()
+ .map(authority -> new SimpleGrantedAuthority((String) authority))
+ .collect(Collectors.toList());
+
+ if (username != null && !username.isEmpty()){
+ return new UsernamePasswordAuthenticationToken(username, null, authorities);
+ }
+
+ } catch (ExpiredJwtException exception) {
+ log.warn("Request to parse expired JWT : {} failed : {}", token, exception.getMessage());
+ } catch (UnsupportedJwtException exception) {
+ log.warn("Request to parse unsupported JWT : {} failed : {}", token, exception.getMessage());
+ } catch (MalformedJwtException exception) {
+ log.warn("Request to parse invalid JWT : {} failed : {}", token, exception.getMessage());
+ } catch (SignatureException exception) {
+ log.warn("Request to parse JWT with invalid signature : {} failed : {}", token, exception.getMessage());
+ } catch (IllegalArgumentException exception) {
+ log.warn("Request to parse empty or null JWT : {} failed : {}", token, exception.getMessage());
+ }
+ }
+
+ return null;
+ }
+
+}
\ No newline at end of file
diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtUtil.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtUtil.java
new file mode 100644
index 0000000..743a2d1
--- /dev/null
+++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtUtil.java
@@ -0,0 +1,45 @@
+package br.com.ifpb.pweb2.securitydemo.config.jwt;
+
+import br.com.ifpb.pweb2.securitydemo.config.SecurityConfig;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+import io.jsonwebtoken.security.Keys;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Configuration
+public class JwtUtil {
+
+ private final SecurityConfig securityConfig;
+ private final String signingKey;
+
+ public JwtUtil(SecurityConfig securityConfig) {
+ this.securityConfig = securityConfig;
+ signingKey = securityConfig.getSecret();
+ }
+
+ public String generateToken(Authentication authentication) {
+ UserDetails user = ((UserDetails) authentication.getPrincipal());
+
+ List roles = user.getAuthorities()
+ .stream()
+ .map(GrantedAuthority::getAuthority)
+ .collect(Collectors.toList());
+
+ return Jwts.builder()
+ .signWith(Keys.hmacShaKeyFor(signingKey.getBytes()), SignatureAlgorithm.HS512)
+ .setHeaderParam("type", securityConfig.getTokenType())
+ .setIssuer(securityConfig.getIssuer()) //emissor
+ .setAudience(securityConfig.getAudience()) //destinatario
+ .setSubject(user.getUsername())
+ .setExpiration(new Date(System.currentTimeMillis() + securityConfig.getExpiration()))
+ .claim("roles", roles)
+ .compact();
+ }
+}
diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/LoginController.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/LoginController.java
new file mode 100644
index 0000000..3667a4f
--- /dev/null
+++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/LoginController.java
@@ -0,0 +1,44 @@
+package br.com.ifpb.pweb2.securitydemo.controller;
+
+import br.com.ifpb.pweb2.securitydemo.config.jwt.JwtUtil;
+import br.com.ifpb.pweb2.securitydemo.controller.dto.LoginDTO;
+import br.com.ifpb.pweb2.securitydemo.controller.dto.TokenDTO;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class LoginController {
+
+ private final JwtUtil jwtUtil;
+
+ private final AuthenticationManager authenticationManager;
+
+ private final PasswordEncoder passwordEncoder;
+
+ public LoginController(AuthenticationManager authenticationManager, JwtUtil jwtUtil, PasswordEncoder passwordEncoder) {
+ this.jwtUtil = jwtUtil;
+ this.authenticationManager = authenticationManager;
+ this.passwordEncoder = passwordEncoder;
+ }
+
+ @PostMapping("login")
+ public ResponseEntity login(@RequestBody LoginDTO loginDTO) {
+
+ System.out.println(passwordEncoder.encode(loginDTO.getPassword()));
+
+ UsernamePasswordAuthenticationToken authenticationToken =
+ new UsernamePasswordAuthenticationToken(loginDTO.getLogin(), loginDTO.getPassword());
+
+ String token = this.jwtUtil.generateToken(authenticationManager.authenticate(authenticationToken));
+
+ return ResponseEntity.ok(new TokenDTO(token));
+ }
+
+}
diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java
new file mode 100644
index 0000000..c11c666
--- /dev/null
+++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/UsuarioController.java
@@ -0,0 +1,67 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package br.com.ifpb.pweb2.securitydemo.controller;
+
+import br.com.ifpb.pweb2.securitydemo.domain.Usuario;
+import br.com.ifpb.pweb2.securitydemo.service.UsuarioException;
+import br.com.ifpb.pweb2.securitydemo.service.UsuarioService;
+import java.util.List;
+import javax.validation.Valid;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * @author ian
+ */
+@RestController
+@RequestMapping("usuario")
+public class UsuarioController {
+ private final UsuarioService usuarioService;
+ private PasswordEncoder passwordEncoder;
+
+ public UsuarioController(UsuarioService usuarioService, PasswordEncoder passwordEncoder) {
+ this.usuarioService = usuarioService;
+ this.passwordEncoder = passwordEncoder;
+ }
+
+ @GetMapping
+ public List listar(){
+ return usuarioService.listarUsuarios();
+ }
+
+ @PostMapping
+ public ResponseEntity salvar(@RequestBody @Valid Usuario usuario){
+ try {
+ usuario.setSenha(passwordEncoder.encode(usuario.getSenha()));
+ usuario = usuarioService.salvarUsuario(usuario);
+ } catch (UsuarioException ex) {
+ return ResponseEntity.badRequest().header("erro", ex.getMessage()).build();
+ }
+ return ResponseEntity.ok(usuario);
+ }
+
+ @PutMapping
+ public ResponseEntity atualizar(@RequestBody @Valid Usuario usuario){
+ usuario.setSenha(passwordEncoder.encode(usuario.getSenha()));
+ return ResponseEntity.ok(usuarioService.atualizarUsuario(usuario));
+ }
+
+ @DeleteMapping("{id}")
+ public ResponseEntity remover(@PathVariable("id") Long id){
+ usuarioService.removerUsuario(id);
+ return ResponseEntity.accepted().build();
+ }
+}
diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/dto/LoginDTO.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/dto/LoginDTO.java
new file mode 100644
index 0000000..1e603c7
--- /dev/null
+++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/dto/LoginDTO.java
@@ -0,0 +1,11 @@
+package br.com.ifpb.pweb2.securitydemo.controller.dto;
+
+import lombok.Data;
+
+@Data
+public class LoginDTO {
+
+ private String login;
+ private String password;
+
+}
diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/dto/TokenDTO.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/dto/TokenDTO.java
new file mode 100644
index 0000000..450c314
--- /dev/null
+++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/dto/TokenDTO.java
@@ -0,0 +1,10 @@
+package br.com.ifpb.pweb2.securitydemo.controller.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class TokenDTO {
+ private String token;
+}
diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/Usuario.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/Usuario.java
index ad72737..0791bcb 100644
--- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/Usuario.java
+++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/domain/Usuario.java
@@ -52,6 +52,11 @@ public class Usuario implements UserDetails {
private LocalDateTime dataCadastro;
+ public Usuario(String login, String senha){
+ this.login = login;
+ this.senha = senha;
+ }
+
@Override
public Collection extends GrantedAuthority> getAuthorities() {
return Collections.singleton(new SimpleGrantedAuthority("ROLE_ADMIN"));
diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/auth/UserDetailsServiceImpl.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/auth/UserDetailsServiceImpl.java
index 00a1db8..bd91d43 100644
--- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/auth/UserDetailsServiceImpl.java
+++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/auth/UserDetailsServiceImpl.java
@@ -1,9 +1,12 @@
package br.com.ifpb.pweb2.securitydemo.service.auth;
+import br.com.ifpb.pweb2.securitydemo.config.ApplicationConfig;
+import br.com.ifpb.pweb2.securitydemo.domain.Usuario;
import br.com.ifpb.pweb2.securitydemo.repository.UsuarioRepository;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
@Service("userDetailsService")
@@ -11,12 +14,21 @@ public class UserDetailsServiceImpl implements UserDetailsService {
private final UsuarioRepository usuarioRepository;
- public UserDetailsServiceImpl(UsuarioRepository usuarioRepository) {
+ private final ApplicationConfig applicationConfig;
+
+ private final PasswordEncoder passwordEncoder;
+
+ public UserDetailsServiceImpl(UsuarioRepository usuarioRepository, ApplicationConfig applicationConfig, PasswordEncoder passwordEncoder) {
this.usuarioRepository = usuarioRepository;
+ this.applicationConfig = applicationConfig;
+ this.passwordEncoder = passwordEncoder;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ if(username.equals(this.applicationConfig.getAutenticacaoPadrao().getLogin())){
+ return new Usuario(this.applicationConfig.getAutenticacaoPadrao().getLogin(), passwordEncoder.encode(this.applicationConfig.getAutenticacaoPadrao().getSenha()));
+ }
return usuarioRepository.findByLogin(username).orElseThrow( () -> new UsernameNotFoundException(username));
}
}
diff --git a/exemplos/02-seguranca/src/main/resources/application-dev.yaml b/exemplos/02-seguranca/src/main/resources/application-dev.yaml
index 05c263f..d951b4b 100644
--- a/exemplos/02-seguranca/src/main/resources/application-dev.yaml
+++ b/exemplos/02-seguranca/src/main/resources/application-dev.yaml
@@ -2,7 +2,7 @@ spring:
datasource:
url: jdbc:postgresql://localhost:5432/pweb2
username: postgres
- password: secret
+ password: postgres
driver-class-name: org.postgresql.Driver
jpa:
hibernate:
diff --git a/exemplos/02-seguranca/src/main/resources/application.yaml b/exemplos/02-seguranca/src/main/resources/application.yaml
index c5af4b7..5dab0c6 100644
--- a/exemplos/02-seguranca/src/main/resources/application.yaml
+++ b/exemplos/02-seguranca/src/main/resources/application.yaml
@@ -10,4 +10,11 @@ app:
login: diego
senha: 123
papel: ADMIN
- tipoAutenticacao: BANCO
\ No newline at end of file
+ tipoAutenticacao: MEMORIA
+
+security:
+ tokenType: JWT
+ issuer: ifpb
+ audience: pweb2
+ expiration: 3600000
+ secret: n2r5u8x/A%D*G-KaPdSgVkYp3s6v9y$B&E(H+MbQeThWmZq4t7w!z%C*F-J@NcRf
\ No newline at end of file