Newer
Older
/*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch das
* Ministerium für Energiewende, Klimaschutz, Umwelt und Natur Zentrales
* IT-Management
* Lizenziert unter der EUPL, Version 1.2 oder - sobald diese von der
* Europäischen Kommission genehmigt wurden - Folgeversionen der EUPL
* ("Lizenz"); Sie dürfen dieses Werk ausschließlich gemäß dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
* Sofern nicht durch anwendbare Rechtsvorschriften gefordert oder in
* schriftlicher Form vereinbart, wird die unter der Lizenz verbreitete Software
* "so wie sie ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet. Die sprachspezifischen
* Genehmigungen und Beschränkungen unter der Lizenz sind dem Lizenztext zu
* entnehmen.
*/
package de.ozgcloud.admin.security;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
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.http.SessionCreationPolicy;
import org.springframework.security.oauth2.core.oidc.StandardClaimNames;
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter;
import org.springframework.security.web.SecurityFilterChain;
import lombok.RequiredArgsConstructor;
@Configuration
@EnableMethodSecurity(securedEnabled = true)
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfiguration {

Jan Zickermann
committed
private final AdminAuthenticationEntryPoint authenticationEntryPoint;
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()));
http.sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS));

Jan Zickermann
committed
http.exceptionHandling(eh -> eh.authenticationEntryPoint(authenticationEntryPoint));
http.authorizeHttpRequests(requests -> requests
.requestMatchers(HttpMethod.GET, "/api/frontendEnvironment").permitAll()
.requestMatchers("/api").authenticated()
.requestMatchers("/api/**").authenticated()
.requestMatchers("/actuator").permitAll()
.requestMatchers("/actuator/**").permitAll()
.requestMatchers("/configserver/**").permitAll()
.anyRequest().denyAll());
return http.build();
}
@Bean
JwtAuthenticationConverter jwtAuthenticationConverter() {
var jwtConverter = new JwtAuthenticationConverter();
jwtConverter.setJwtGrantedAuthoritiesConverter(jwt -> List.of(() -> "ROLE_USER"));
jwtConverter.setPrincipalClaimName(StandardClaimNames.PREFERRED_USERNAME);
return jwtConverter;
}