/
human
/
Mini-bank
Обзор
Документация
Войти
/
human
/
Mini-bank
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
clients/src/main/java/org/example/configuration/SecurityConfig.java
93 строки
5 KB
gbb
Add spa
06 фев 2025, 08:31
06 фев 2025, 08:31
a8e807d
Код
Авторство
О чём код?
package org.example.configuration; import com.nimbusds.jose.JOSEException; import com.nimbusds.jose.jwk.source.ImmutableSecret; import com.nimbusds.jose.jwk.source.JWKSource; import com.nimbusds.jose.proc.SecurityContext; import java.util.ArrayList; import java.util.stream.Collectors; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.springframework.boot.autoconfigure.security.servlet.PathRequest; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.security.authorization.AuthorityAuthorizationDecision; 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.HeadersConfigurer; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.oauth2.jwt.JwtDecoder; import org.springframework.security.oauth2.jwt.JwtEncoder; import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; import org.springframework.security.oauth2.jwt.NimbusJwtEncoder; import org.springframework.security.oauth2.server.resource.web.BearerTokenAuthenticationEntryPoint; import org.springframework.security.oauth2.server.resource.web.access.BearerTokenAccessDeniedHandler; import org.springframework.security.web.SecurityFilterChain; /** * Конфигурация безопасности. */ @Configuration @EnableWebSecurity @EnableMethodSecurity public class SecurityConfig { public static String secret = "s/4KMb61LOrMYYAn4rfaQYSgr+le5SMrsMzKw8G6bXc="; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .csrf(csrf -> csrf.disable()) .cors(cors -> cors.disable()) .anonymous(anonymous -> anonymous.disable()) .authorizeHttpRequests((req) -> req .requestMatchers(HttpMethod.POST, "/user").permitAll() .requestMatchers("/swagger-resources/**", "/swagger-ui/**", "/v3/api-docs/**", "/error", "/swagger").permitAll() .requestMatchers("/h2-console/**").permitAll() .requestMatchers("/auth/login").authenticated().anyRequest() .access((authorization, request) -> { if (!request.getRequest().getParameter("id") .equalsIgnoreCase(authorization.get().getName()) && !authorization.get().getAuthorities() .contains(new SimpleGrantedAuthority("SCOPE_ADMIN"))) { return new AuthorityAuthorizationDecision(false, new ArrayList<>()); } return new AuthorityAuthorizationDecision(true, authorization.get().getAuthorities() .stream().collect(Collectors.toList())); }) ) .headers((headers) -> headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin)) .securityMatcher(PathRequest.toH2Console()) .httpBasic(Customizer.withDefaults()) .oauth2ResourceServer(oauth2 -> oauth2 .jwt(Customizer.withDefaults())) .sessionManagement(session -> session .sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .exceptionHandling(exceptions -> exceptions .authenticationEntryPoint(new BearerTokenAuthenticationEntryPoint()) .accessDeniedHandler(new BearerTokenAccessDeniedHandler())).build(); } @Bean public JwtEncoder jwtEncoder() throws JOSEException { SecretKey key = new SecretKeySpec(secret.getBytes(), "HmacSHA256"); JWKSource<SecurityContext> immutableSecret = new ImmutableSecret<SecurityContext>(key); return new NimbusJwtEncoder(immutableSecret); } @Bean public JwtDecoder jwtDecoder() { SecretKey originalKey = new SecretKeySpec(secret.getBytes(), "HmacSHA256"); NimbusJwtDecoder jwtDecoder = NimbusJwtDecoder.withSecretKey(originalKey).build(); return jwtDecoder; } }