Untitled
unknown
plain_text
5 months ago
4.6 kB
2
Indexable
package com.projects.importautos.security.configurations; import com.projects.importautos.configuration.CORSConfig; import com.projects.importautos.security.jwt.AuthCookieTokenFilter; import com.projects.importautos.security.jwt.AuthEntryPointJwt; import com.projects.importautos.security.services.CustomOAuth2UserService; import com.projects.importautos.security.services.OAuth2AuthenticationSuccessHandler; import com.projects.importautos.security.services.UserDetailsServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; 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.configurers.AbstractHttpConfigurer; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; @Configuration @EnableWebSecurity @EnableJpaAuditing public class SecurityConfig { private final UserDetailsServiceImpl userDetailsService; private final AuthEntryPointJwt unauthorizedHandler; private final CustomOAuth2UserService customOAuth2UserService; private final OAuth2AuthenticationSuccessHandler oAuth2AuthenticationSuccessHandler; public SecurityConfig(UserDetailsServiceImpl userDetailsService, AuthEntryPointJwt unauthorizedHandler, CustomOAuth2UserService customOAuth2UserService, OAuth2AuthenticationSuccessHandler oAuth2AuthenticationSuccessHandler) { this.userDetailsService = userDetailsService; this.unauthorizedHandler = unauthorizedHandler; this.customOAuth2UserService = customOAuth2UserService; this.oAuth2AuthenticationSuccessHandler = oAuth2AuthenticationSuccessHandler; } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { // Set up CORS http.cors(cors -> { }) .csrf(AbstractHttpConfigurer::disable) // Disable CSRF for stateless apps using JWT .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // Use stateless session for JWT .authorizeHttpRequests(auth -> auth .requestMatchers("/public/**", "/**").permitAll() .anyRequest().authenticated() ) .oauth2Login(oauth2 -> oauth2 .userInfoEndpoint(userInfo -> userInfo.userService(customOAuth2UserService)) .successHandler(oAuth2AuthenticationSuccessHandler) ) .exceptionHandling(e -> e.authenticationEntryPoint(unauthorizedHandler)) .addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class); http.authenticationProvider(authenticationProvider()); return http.build(); } @Bean public AuthCookieTokenFilter authenticationJwtTokenFilter() { return new AuthCookieTokenFilter(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception { return authConfig.getAuthenticationManager(); } @Bean public DaoAuthenticationProvider authenticationProvider() { DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); authProvider.setUserDetailsService(userDetailsService); authProvider.setPasswordEncoder(passwordEncoder()); return authProvider; } }
Editor is loading...
Leave a Comment