SecurityConfig.java 3.2 KB

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