diff --git a/pom.xml b/pom.xml index 6df42a0..ac9a174 100644 --- a/pom.xml +++ b/pom.xml @@ -96,7 +96,6 @@ java-jwt 4.2.1 - diff --git a/src/main/java/pi/procurarteapi/app/auth/config/Configurations.java b/src/main/java/pi/procurarteapi/app/auth/config/Configurations.java index d6b3e91..219d62a 100644 --- a/src/main/java/pi/procurarteapi/app/auth/config/Configurations.java +++ b/src/main/java/pi/procurarteapi/app/auth/config/Configurations.java @@ -12,14 +12,18 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; @Configuration @EnableWebSecurity public class Configurations { - @Autowired + //@Autowired //private + @Autowired + private FilterToken filter; + //Faz a liberação das paginas que podem ser acessadas com ou sem autenticação @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http)throws Exception{ @@ -30,9 +34,19 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http)throws Exceptio .permitAll() .antMatchers(HttpMethod.GET, "/musician") .permitAll() + .antMatchers(HttpMethod.GET, "/musician/{id}") + .permitAll() .antMatchers(HttpMethod.POST, "/musician") .permitAll() - .anyRequest().authenticated().and().build(); + .antMatchers(HttpMethod.GET, "/musicstyle") + .permitAll() + .antMatchers(HttpMethod.GET, "/instrument") + .permitAll() + .anyRequest().authenticated() + .and().addFilterBefore(filter,UsernamePasswordAuthenticationFilter.class) + .build(); + + } @Bean diff --git a/src/main/java/pi/procurarteapi/app/auth/config/FilterToken.java b/src/main/java/pi/procurarteapi/app/auth/config/FilterToken.java new file mode 100644 index 0000000..0ebd3cd --- /dev/null +++ b/src/main/java/pi/procurarteapi/app/auth/config/FilterToken.java @@ -0,0 +1,49 @@ +package pi.procurarteapi.app.auth.config; + +import java.io.IOException; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import pi.procurarteapi.app.auth.services.TokenService; +import pi.procurarteapi.infra.repositories.IMusicianRepository; + +@Component +public class FilterToken extends OncePerRequestFilter{ + + @Autowired + private TokenService tokenService; + + @Autowired + private IMusicianRepository musicianRepository; + + @Override + protected void doFilterInternal(HttpServletRequest request, + HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + + String token; + var authorizationHeader = request.getHeader("Authorization"); + + if(authorizationHeader != null){ + token = authorizationHeader.replace("Bearer ", ""); + var subject = tokenService.getSubject(token); + + var musician = musicianRepository.findByEmail(subject); + + var authentication = new UsernamePasswordAuthenticationToken(musician,null, musician.getAuthorities()); + + SecurityContextHolder.getContext().setAuthentication(authentication); + } + + filterChain.doFilter(request, response); + } +} diff --git a/src/main/java/pi/procurarteapi/app/auth/services/TokenService.java b/src/main/java/pi/procurarteapi/app/auth/services/TokenService.java index 93b8bf4..d46b6fa 100644 --- a/src/main/java/pi/procurarteapi/app/auth/services/TokenService.java +++ b/src/main/java/pi/procurarteapi/app/auth/services/TokenService.java @@ -23,9 +23,15 @@ public String gererToken(Musician musician) { .withSubject(musician.getUsername()) .withClaim("id", musician.getId()) .withExpiresAt(LocalDateTime.now() - .plusMinutes(10) + .plusMinutes(30) + //.plusSeconds(30) .toInstant(ZoneOffset.of("-03:00")) ).sign(Algorithm.HMAC256("secreta")); } + + public String getSubject(String token){ + return JWT.require(Algorithm.HMAC256("secreta")) + .withIssuer("Musico").build().verify(token).getSubject(); + } }