package ru.dragonestia.picker.config; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; 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.core.userdetails.UserDetailsService; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity @EnableMethodSecurity @RequiredArgsConstructor public class SecurityConfig { @Bean PasswordEncoder passwordEncoder() { return new PasswordEncoder() { // TODO: use hash algorithm @Override public String encode(CharSequence rawPassword) { return rawPassword.toString(); } @Override public boolean matches(CharSequence rawPassword, String encodedPassword) { return rawPassword.toString().equals(encodedPassword); } }; } @Bean SecurityFilterChain securityFilterChain(HttpSecurity http, UserDetailsService userDetailsService) throws Exception { http.csrf(AbstractHttpConfigurer::disable); http.logout(AbstractHttpConfigurer::disable); http.formLogin(AbstractHttpConfigurer::disable); http.sessionManagement(m -> m.sessionCreationPolicy(SessionCreationPolicy.STATELESS)); http.authorizeHttpRequests(auth -> { auth .requestMatchers("/actuator").permitAll() .requestMatchers("/actuator/**").permitAll() .requestMatchers("/api-docs-ui").permitAll() .requestMatchers("/swagger-ui").permitAll() .requestMatchers("/swagger-ui/**").permitAll() .requestMatchers("/info").permitAll() .anyRequest().authenticated(); }); http.httpBasic(Customizer.withDefaults()); http.userDetailsService(userDetailsService); return http.build(); } }