WebSecurityConfig.java 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package es.uv.garcosda.config;
  2. import static org.springframework.security.config.http.SessionCreationPolicy.STATELESS;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.http.HttpMethod;
  7. import org.springframework.security.authentication.AuthenticationManager;
  8. import org.springframework.security.authentication.ProviderManager;
  9. import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
  10. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
  11. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
  12. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  13. import org.springframework.security.crypto.password.PasswordEncoder;
  14. import org.springframework.security.web.SecurityFilterChain;
  15. import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
  16. import es.uv.garcosda.security.CustomAuthenticationFilter;
  17. import es.uv.garcosda.security.CustomAuthorizationFilter;
  18. import es.uv.garcosda.security.CustomUserDetailsService;
  19. import es.uv.garcosda.services.JwtService;
  20. @Configuration
  21. @EnableWebSecurity
  22. public class WebSecurityConfig{
  23. @Autowired
  24. private CustomUserDetailsService userDetailsService;
  25. @Autowired
  26. private JwtService jwtService;
  27. @Bean
  28. public static PasswordEncoder passwordEncoder() {
  29. return new BCryptPasswordEncoder();
  30. }
  31. @Bean
  32. public AuthenticationManager authenticationManager(){
  33. DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
  34. authProvider.setUserDetailsService(userDetailsService);
  35. authProvider.setPasswordEncoder(passwordEncoder());
  36. return new ProviderManager(authProvider);
  37. }
  38. @Bean
  39. public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
  40. CustomAuthenticationFilter authenticationFilter = new CustomAuthenticationFilter(authenticationManager(), jwtService);
  41. authenticationFilter.setFilterProcessesUrl("/api/v1/login");
  42. CustomAuthorizationFilter authorizationFilter = new CustomAuthorizationFilter(jwtService);
  43. http.csrf().disable()
  44. .cors().disable()
  45. .sessionManagement().sessionCreationPolicy(STATELESS)
  46. .and()
  47. .authorizeHttpRequests()
  48. .requestMatchers("/api/v1/login").permitAll()
  49. .requestMatchers(HttpMethod.GET, "/api/v1/users/**").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN")
  50. .requestMatchers(HttpMethod.GET, "/api/v1/posts").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN")
  51. .requestMatchers(HttpMethod.GET, "/api/v1/posts/**").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN")
  52. .requestMatchers(HttpMethod.POST, "/api/v1/posts").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN")
  53. .requestMatchers(HttpMethod.DELETE, "/api/v1/posts/**").hasAuthority("ROLE_ADMIN")
  54. .and()
  55. .addFilter(authenticationFilter)
  56. .addFilterBefore(authorizationFilter, UsernamePasswordAuthenticationFilter.class);
  57. return http.build();
  58. }
  59. }