SecurityConfig.java 3.46 KB
Newer Older
1
package web.multitask.trismegistoservices.config;
2

3
import lombok.AllArgsConstructor;
4 5 6 7
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
8
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
9 10 11
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;
12
import org.springframework.security.config.http.SessionCreationPolicy;
13 14
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
15
import org.springframework.security.web.SecurityFilterChain;
16 17 18 19
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
20
import web.multitask.trismegistoservices.filter.JWTokenFilter;
21 22
import web.multitask.trismegistoservices.singleton.ThreadLocalSingleton;
import web.multitask.trismegistoservices.singleton.TokenSingleton;
23
import web.multitask.trismegistoservices.utils.JWTokenUtil;
24 25 26

@Configuration
@EnableWebSecurity
27 28
@AllArgsConstructor
public class SecurityConfig{
29

30
    private final JWTokenUtil jwtTokenUtil;
31 32
    private final TokenSingleton tokenSingleton;
    private ThreadLocalSingleton threadLocalSingleton;
33 34

    @Bean
35
    AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration)
36 37
            throws Exception {
        return authenticationConfiguration.getAuthenticationManager();
38 39
    }

40 41
    @Bean
    SecurityFilterChain configure(HttpSecurity http) throws Exception {
42
        http.cors(AbstractHttpConfigurer::disable).csrf(AbstractHttpConfigurer::disable)
43
                .sessionManagement(management -> management.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
44
                .authorizeHttpRequests(
45
                        authorizeRequests -> authorizeRequests
46
                                .antMatchers("/security/**").hasAnyAuthority("ADMIN")
47
                                .regexMatchers(".*/private/.*").hasAnyAuthority("ADMIN", "USER")
48
                                .regexMatchers(".*/public/.*").permitAll()
49
                                .regexMatchers(".*/service/.*").hasAnyAuthority("ADMIN", "SERVICE")
50
                                .antMatchers(HttpMethod.GET, "/**").permitAll()
51
                                .antMatchers("/token/**").permitAll());
52
        http.addFilterBefore(new JWTokenFilter(jwtTokenUtil, tokenSingleton,threadLocalSingleton), UsernamePasswordAuthenticationFilter.class);
53
        return http.build();
54 55 56 57 58 59 60
    }

    @Bean
    PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

61 62 63 64 65 66 67 68 69 70
    @Bean
    CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
71 72

}