63 lines
2.6 KiB
Java
63 lines
2.6 KiB
Java
package com.ddf.vodsystem.configuration;
|
|
|
|
import com.ddf.vodsystem.security.CustomOAuth2UserService;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Configuration;
|
|
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.web.SecurityFilterChain;
|
|
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
|
|
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
|
|
|
|
@Configuration
|
|
@EnableWebSecurity
|
|
public class SecurityConfig {
|
|
|
|
private final CustomOAuth2UserService customOAuth2UserService;
|
|
|
|
@Value("${frontend.url}")
|
|
private String frontendUrl;
|
|
|
|
public SecurityConfig(CustomOAuth2UserService customOAuth2UserService) {
|
|
this.customOAuth2UserService = customOAuth2UserService;
|
|
}
|
|
|
|
@Bean
|
|
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
|
|
http
|
|
.csrf(AbstractHttpConfigurer::disable)
|
|
.authorizeHttpRequests(auth -> auth
|
|
.requestMatchers("/api/v1/auth/login", "/api/v1/auth/user").permitAll()
|
|
.requestMatchers("/api/v1/upload", "/api/v1/download/**").permitAll()
|
|
.requestMatchers("/api/v1/edit/**", "/api/v1/process/**", "/api/v1/progress/**").permitAll()
|
|
.requestMatchers("/api/v1/metadata/**").permitAll()
|
|
.anyRequest().authenticated()
|
|
)
|
|
.oauth2Login(oauth2 -> oauth2
|
|
.userInfoEndpoint(userInfo -> userInfo
|
|
.userService(customOAuth2UserService)
|
|
)
|
|
.successHandler(successHandler()))
|
|
.logout(logout -> logout
|
|
.logoutUrl("/api/v1/auth/logout")
|
|
.logoutSuccessHandler(logoutSuccessHandler())
|
|
.invalidateHttpSession(true)
|
|
.deleteCookies("JSESSIONID")
|
|
);
|
|
|
|
return http.build();
|
|
}
|
|
|
|
@Bean
|
|
public AuthenticationSuccessHandler successHandler() {
|
|
return (request, response, authentication) -> response.sendRedirect(frontendUrl);
|
|
}
|
|
|
|
@Bean
|
|
public LogoutSuccessHandler logoutSuccessHandler() {
|
|
return (request, response, authentication) -> response.sendRedirect(frontendUrl);
|
|
}
|
|
|
|
} |