From cd3cecf0b9e282aa3e46931aecd67f78fc0a9022 Mon Sep 17 00:00:00 2001 From: caiquevitoriano Date: Thu, 17 Oct 2019 19:46:58 -0300 Subject: [PATCH 1/4] banco --- run.sh | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 run.sh diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..93055b9 --- /dev/null +++ b/run.sh @@ -0,0 +1,2 @@ +sudo docker run -p 5433:5432 -d --name postgres --env POSTGRES_PASSWORD=1327 postgres:9.4.19 +sudo docker start postgres From 08ee590d0c169e8e4a41dd53898c86b20c0c4fdc Mon Sep 17 00:00:00 2001 From: caiquevitoriano Date: Thu, 24 Oct 2019 21:10:12 -0300 Subject: [PATCH 2/4] atividade 1 --- .../src/main/resources/application-dev.yaml | 4 +- exemplos/02-seguranca/pom.xml | 19 +++- .../config/ApplicationConfig.java | 3 +- .../securitydemo/config/SecurityConfig.java | 18 ++++ .../config/SecurityConstants.java | 19 ++++ .../config/WebSecurityConfig.java | 57 ++++++++++-- .../config/jwt/JwtAuthenticationFilter.java | 68 ++++++++++++++ .../config/jwt/JwtAuthorizationFilter.java | 90 +++++++++++++++++++ .../controller/PublicoController.java | 2 +- .../controller/UsuarioController.java | 25 +++++- .../pweb2/securitydemo/domain/Usuario.java | 8 ++ .../securitydemo/service/UsuarioService.java | 6 ++ .../src/main/resources/application-dev.yaml | 4 +- .../src/main/resources/application.yaml | 15 +++- 14 files changed, 317 insertions(+), 21 deletions(-) create mode 100644 exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConfig.java create mode 100644 exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConstants.java create mode 100644 exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java create mode 100644 exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthorizationFilter.java diff --git a/exemplos/02-1-seguranca-jwt/src/main/resources/application-dev.yaml b/exemplos/02-1-seguranca-jwt/src/main/resources/application-dev.yaml index 05c263f..c9715e8 100644 --- a/exemplos/02-1-seguranca-jwt/src/main/resources/application-dev.yaml +++ b/exemplos/02-1-seguranca-jwt/src/main/resources/application-dev.yaml @@ -1,8 +1,8 @@ spring: datasource: - url: jdbc:postgresql://localhost:5432/pweb2 + url: jdbc:postgresql://localhost:5433/pweb2-jwt username: postgres - password: secret + password: 1327 driver-class-name: org.postgresql.Driver jpa: hibernate: diff --git a/exemplos/02-seguranca/pom.xml b/exemplos/02-seguranca/pom.xml index 7c0b5df..8254ede 100644 --- a/exemplos/02-seguranca/pom.xml +++ b/exemplos/02-seguranca/pom.xml @@ -15,7 +15,7 @@ Demo project for Spring Security - 1.8 + 11 @@ -55,6 +55,23 @@ postgresql 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/ApplicationConfig.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/ApplicationConfig.java index bc36b99..8a8df2d 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/ApplicationConfig.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/ApplicationConfig.java @@ -1,8 +1,7 @@ package br.com.ifpb.pweb2.securitydemo.config; import lombok.Data; -import lombok.Getter; -import lombok.Setter; + import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; 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..7356235 --- /dev/null +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConfig.java @@ -0,0 +1,18 @@ +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 authLoginUrl; + 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/SecurityConstants.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConstants.java new file mode 100644 index 0000000..12d3ef4 --- /dev/null +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/SecurityConstants.java @@ -0,0 +1,19 @@ +package br.com.ifpb.pweb2.securitydemo.config; + +public class SecurityConstants { + + public static final String AUTH_LOGIN_URL = "/api/authenticate"; + + // Signing key for HS512 algorithm + // Use http://www.allkeysgenerator.com/ para gerar uma chave + public static final String JWT_SECRET = "E07451F5-583D-4B1A-8AF1-A3AF70AABD43"; + + // JWT token defaults + public static final String TOKEN_HEADER = "Authorization"; + public static final String TOKEN_PREFIX = "Bearer "; + public static final String TOKEN_TYPE = "JWT"; + public static final String TOKEN_ISSUER = "secure-api"; + public static final String TOKEN_AUDIENCE = "secure-app"; + + private SecurityConstants() {} +} 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 43671e8..e5de4cf 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,28 +1,54 @@ package br.com.ifpb.pweb2.securitydemo.config; +import br.com.ifpb.pweb2.securitydemo.config.jwt.JwtAuthenticationFilter; +import br.com.ifpb.pweb2.securitydemo.config.jwt.JwtAuthorizationFilter; +import br.com.ifpb.pweb2.securitydemo.service.UsuarioService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.core.annotation.Order; +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) public class WebSecurityConfig extends WebSecurityConfigurerAdapter { - public WebSecurityConfig() { + private final SecurityConfig securityConfig; + private UsuarioService usuarioService; + + @Autowired + private ApplicationConfig applicationConfig; + private final UserDetailsService userDetailsService; + + private final PasswordEncoder passwordEncoder; + + + public WebSecurityConfig(SecurityConfig securityConfig, UsuarioService usuarioService, UserDetailsService userDetailsService, PasswordEncoder passwordEncoder) { + this.securityConfig = securityConfig; + this.usuarioService = usuarioService; + this.userDetailsService = userDetailsService; + this.passwordEncoder = passwordEncoder; } @Override protected void configure(HttpSecurity http) throws Exception { - http + http.cors().and() .authorizeRequests() - .antMatchers("/api/**").authenticated() .antMatchers("/publico").permitAll() - .antMatchers("/usuarios").hasRole("ADMIN") - .and() - .sessionManagement() + .anyRequest().authenticated() + .and() + .addFilter(new JwtAuthenticationFilter(authenticationManager(), securityConfig)) + .addFilter(new JwtAuthorizationFilter(authenticationManager(), securityConfig)). + sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .httpBasic() @@ -30,4 +56,23 @@ protected void configure(HttpSecurity http) throws Exception { .csrf().disable(); } + @Override + public void configure(AuthenticationManagerBuilder auth) throws Exception { + if(!usuarioService.isEmpty()){ + auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder); + }else{ + auth.inMemoryAuthentication() + .passwordEncoder(passwordEncoder) + .withUser(applicationConfig.getAutenticacaoPadrao().getLogin()) + .password(passwordEncoder.encode(applicationConfig.getAutenticacaoPadrao().getSenha())) + .authorities("ROLE_"+applicationConfig.getAutenticacaoPadrao().getPapel()); + } } + + @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/JwtAuthenticationFilter.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java new file mode 100644 index 0000000..e309925 --- /dev/null +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthenticationFilter.java @@ -0,0 +1,68 @@ +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.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.stereotype.Component; + +import javax.servlet.FilterChain; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter { + + private final AuthenticationManager authenticationManager; + + private final SecurityConfig securityConfig; + + public JwtAuthenticationFilter(AuthenticationManager authenticationManager, SecurityConfig securityConfig) { + this.authenticationManager = authenticationManager; + this.securityConfig = securityConfig; + setFilterProcessesUrl(this.securityConfig.getAuthLoginUrl()); + } + + @Override + public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) { + String username = request.getParameter("usuario"); + String password = request.getParameter("senha"); + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); + + return authenticationManager.authenticate(authenticationToken); + } + + @Override + protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, + FilterChain filterChain, Authentication authentication) { + UserDetails user = ((UserDetails) authentication.getPrincipal()); + + List roles = user.getAuthorities() + .stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.toList()); + + String signingKey = securityConfig.getSecret(); + + String token = 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(); + + response.addHeader("Authorization", "Bearer " + token); + } + +} \ No newline at end of file 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..71bf44a --- /dev/null +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/jwt/JwtAuthorizationFilter.java @@ -0,0 +1,90 @@ +package br.com.ifpb.pweb2.securitydemo.config.jwt; + +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +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 br.com.ifpb.pweb2.securitydemo.config.SecurityConfig; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; +import io.jsonwebtoken.Jws; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.MalformedJwtException; +import io.jsonwebtoken.SignatureException; +import io.jsonwebtoken.UnsupportedJwtException; +import lombok.extern.slf4j.Slf4j; + +@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/controller/PublicoController.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/PublicoController.java index c056b1c..77e096c 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/PublicoController.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/controller/PublicoController.java @@ -10,7 +10,7 @@ public class PublicoController { @GetMapping public String exibirMensagem() { - return "Olá, meu acesso é público"; + return "Olá, meu acesso é públicooooo"; } } 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 index b1d2d8c..b1f9725 100644 --- 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 @@ -3,8 +3,10 @@ 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 org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @@ -15,30 +17,45 @@ public class UsuarioController { private final UsuarioService usuarioService; + private BCryptPasswordEncoder bCryptPasswordEncoder; - public UsuarioController(UsuarioService usuarioService) { + + public UsuarioController(UsuarioService usuarioService, BCryptPasswordEncoder bCryptPasswordEncoder) { this.usuarioService = usuarioService; + this.bCryptPasswordEncoder = bCryptPasswordEncoder; } - @GetMapping("/{login}") public Usuario recuperarPorLogin(@PathVariable("login") String login) { return usuarioService.recuperarPorLogin(login).orElseThrow(RuntimeException::new); } + + @GetMapping public List listarUsuarios() { + return usuarioService.listarUsuarios(); } @PostMapping public ResponseEntity salvarUsuario(@RequestBody @Valid Usuario usuario) { try { - usuario = usuarioService.salvarUsuario(usuario); + if (usuario == null){ + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); + } + usuario.setSenha(bCryptPasswordEncoder.encode(usuario.getPassword())); + + if (usuarioService.salvarUsuario(usuario) == null){ + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); + } + + return ResponseEntity.status(HttpStatus.CREATED).build(); + + } catch(UsuarioException e) { return ResponseEntity.badRequest().header("erro", e.getMessage()).build(); } - return ResponseEntity.ok(usuario); } @PutMapping 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..0b0e899 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 @@ -1,5 +1,6 @@ package br.com.ifpb.pweb2.securitydemo.domain; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.*; import org.hibernate.validator.constraints.br.CPF; import org.springframework.security.core.GrantedAuthority; @@ -53,36 +54,43 @@ public class Usuario implements UserDetails { private LocalDateTime dataCadastro; @Override + @JsonIgnore public Collection getAuthorities() { return Collections.singleton(new SimpleGrantedAuthority("ROLE_ADMIN")); } @Override + @JsonIgnore public String getPassword() { return senha; } @Override + @JsonIgnore public String getUsername() { return login; } + @JsonIgnore @Override public boolean isAccountNonExpired() { return true; } @Override + @JsonIgnore public boolean isAccountNonLocked() { return true; } @Override + @JsonIgnore public boolean isCredentialsNonExpired() { return true; } @Override + @JsonIgnore public boolean isEnabled() { return true; } diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java index 08636e1..8d2a503 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/service/UsuarioService.java @@ -58,7 +58,13 @@ public Optional recuperarPorNomeEIdade(String nome, Integer idade) { } public Usuario atualizarUsuario(Usuario usuario) { + usuario.setSenha(passwordEncoder.encode(usuario.getSenha())); return this.usuarioRepository.save(usuario); } + + public boolean isEmpty(){ + return usuarioRepository.findAll().isEmpty(); + } + } diff --git a/exemplos/02-seguranca/src/main/resources/application-dev.yaml b/exemplos/02-seguranca/src/main/resources/application-dev.yaml index 05c263f..821399f 100644 --- a/exemplos/02-seguranca/src/main/resources/application-dev.yaml +++ b/exemplos/02-seguranca/src/main/resources/application-dev.yaml @@ -1,8 +1,8 @@ spring: datasource: - url: jdbc:postgresql://localhost:5432/pweb2 + url: jdbc:postgresql://localhost:5433/pweb2 username: postgres - password: secret + password: 1327 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..5882cd2 100644 --- a/exemplos/02-seguranca/src/main/resources/application.yaml +++ b/exemplos/02-seguranca/src/main/resources/application.yaml @@ -7,7 +7,16 @@ spring: app: autenticacaoPadrao: - login: diego - senha: 123 + login: admin + senha: 1234 papel: ADMIN - tipoAutenticacao: BANCO \ No newline at end of file + tipoAutenticacao: BANCO + +security: + authLoginUrl: /login + tokenType: JWT + issuer: ifpb + audience: pweb2 + expiration: 3600000 + secret: s5v8y/A?D(G+KbPeShVmYq3t6w9z$C&E)H@McQfTjWnZr4u7x!A%D*G-JaNdRgUk + ## Use: https://www.allkeysgenerator.com/ para gerar o segredo \ No newline at end of file From 65ee63c9ad04f643a8fc2ff2d02e4fef6aad4e65 Mon Sep 17 00:00:00 2001 From: caiquevitoriano Date: Thu, 24 Oct 2019 21:38:41 -0300 Subject: [PATCH 3/4] =?UTF-8?q?corre=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ifpb/pweb2/securitydemo/config/ApplicationConfig.java | 2 +- .../ifpb/pweb2/securitydemo/controller/UsuarioController.java | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/ApplicationConfig.java b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/ApplicationConfig.java index 8a8df2d..427d18d 100644 --- a/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/ApplicationConfig.java +++ b/exemplos/02-seguranca/src/main/java/br/com/ifpb/pweb2/securitydemo/config/ApplicationConfig.java @@ -12,7 +12,7 @@ public class ApplicationConfig { private AutenticacaoPadrao autenticacaoPadrao = new AutenticacaoPadrao(); - private enum TipoAutenticacao { MEMORIA, BANCO }; + private enum TipoAutenticacao { MEMORIA, BANCO } @Data public class AutenticacaoPadrao { 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 index b1f9725..3c3ddd3 100644 --- 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 @@ -30,8 +30,6 @@ public Usuario recuperarPorLogin(@PathVariable("login") String login) { return usuarioService.recuperarPorLogin(login).orElseThrow(RuntimeException::new); } - - @GetMapping public List listarUsuarios() { From 4fa00f900f471c06b3851fd879000b92d35bef94 Mon Sep 17 00:00:00 2001 From: caiquevitoriano Date: Thu, 24 Oct 2019 21:50:46 -0300 Subject: [PATCH 4/4] =?UTF-8?q?quest=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...m autentica\303\247\303\243o via Token .pdf" | Bin 0 -> 70823 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token .pdf" diff --git "a/Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token .pdf" "b/Criar Aplica\303\247\303\243o com autentica\303\247\303\243o via Token .pdf" new file mode 100644 index 0000000000000000000000000000000000000000..cb7de453460adb2371a56ffb93a25ff6758a2397 GIT binary patch literal 70823 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%0A>G1HRrGe9*QXD2>0_z23fr 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

#CoE>1q|AGzvL4<7`#q)6muoKH4w6<_ubK=?m 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 literal 0 HcmV?d00001