Skip to content
Snippets Groups Projects
SecurityConfiguration.java 3.28 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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());
    
    OZGCloud's avatar
    OZGCloud committed
    
    		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();
    	}