SecurityConfig.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package space.anyi.serve.config;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.http.HttpMethod;
  5. import org.springframework.security.authentication.AuthenticationManager;
  6. import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
  7. import org.springframework.security.config.annotation.web.builders.HttpSecurity;
  8. import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
  9. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
  10. import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
  11. import org.springframework.security.config.http.SessionCreationPolicy;
  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 space.anyi.serve.filter.JwtAuthenticationFilter;
  17. import space.anyi.serve.handler.security.JwtAccessDeniedHandler;
  18. import space.anyi.serve.handler.security.JwtAuthenticationEntryPoint;
  19. @EnableWebSecurity
  20. @EnableMethodSecurity(prePostEnabled = true)
  21. @Configuration
  22. public class SecurityConfig {
  23. private final JwtAuthenticationFilter jwtAuthenticationFilter;
  24. private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;
  25. private final JwtAccessDeniedHandler jwtAccessDeniedHandler;
  26. public SecurityConfig(JwtAuthenticationFilter jwtAuthenticationFilter,
  27. JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint,
  28. JwtAccessDeniedHandler jwtAccessDeniedHandler) {
  29. this.jwtAuthenticationFilter = jwtAuthenticationFilter;
  30. this.jwtAuthenticationEntryPoint = jwtAuthenticationEntryPoint;
  31. this.jwtAccessDeniedHandler = jwtAccessDeniedHandler;
  32. }
  33. @Bean
  34. public PasswordEncoder passwordEncoder() {
  35. return new BCryptPasswordEncoder();
  36. }
  37. @Bean
  38. public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
  39. return configuration.getAuthenticationManager();
  40. }
  41. @Bean
  42. public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
  43. http
  44. .csrf(AbstractHttpConfigurer::disable)
  45. .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
  46. .authorizeHttpRequests(authorize -> authorize
  47. .requestMatchers("/auth/login", "/auth/register").permitAll()
  48. .requestMatchers("/swagger-ui/**", "/v3/api-docs/**", "/swagger-ui.html").permitAll()
  49. .requestMatchers(HttpMethod.GET,"/meta/**").permitAll()
  50. .requestMatchers(HttpMethod.POST,"/meta/**").permitAll()
  51. .requestMatchers(HttpMethod.OPTIONS, "/**").permitAll()
  52. .anyRequest().authenticated()
  53. )
  54. .exceptionHandling(ex -> ex
  55. .authenticationEntryPoint(jwtAuthenticationEntryPoint)
  56. .accessDeniedHandler(jwtAccessDeniedHandler)
  57. )
  58. .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
  59. return http.build();
  60. }
  61. }