package de.itvsh.goofy; import org.keycloak.adapters.springsecurity.KeycloakConfiguration; import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider; import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.authentication.session.NullAuthenticatedSessionStrategy; import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy; import org.springframework.security.web.csrf.CookieCsrfTokenRepository; import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter; import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter.XFrameOptionsMode; import de.itvsh.goofy.common.downloadtoken.DownloadTokenAuthenticationFilter; @EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true) @KeycloakConfiguration public class SecurityConfiguration extends KeycloakWebSecurityConfigurerAdapter { @Autowired private DownloadTokenAuthenticationFilter downloadTokenFilter; @Override protected void configure(HttpSecurity http) throws Exception { super.configure(http); SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL); http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()); http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and().authorizeRequests()// .antMatchers(HttpMethod.GET, "/api/environment").permitAll()// .antMatchers(HttpMethod.GET, "/assets/**").permitAll()// .antMatchers(HttpMethod.GET, "/vorgang/**").permitAll()// .antMatchers(HttpMethod.GET, "/search/**").permitAll()// .antMatchers("/api").authenticated()// .antMatchers("/api/**").authenticated()// .antMatchers("/actuator").permitAll()// .antMatchers("/actuator/**").permitAll()// .antMatchers("/").permitAll()// .antMatchers("/*").permitAll()// .anyRequest().denyAll(); http.headers().addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsMode.SAMEORIGIN)); http.addFilterBefore(downloadTokenFilter, UsernamePasswordAuthenticationFilter.class); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) { KeycloakAuthenticationProvider keyCloakAuthProvider = keycloakAuthenticationProvider(); keyCloakAuthProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper()); auth.authenticationProvider(keyCloakAuthProvider); } @Override protected SessionAuthenticationStrategy sessionAuthenticationStrategy() { return new NullAuthenticatedSessionStrategy(); } }