package com.greglturnquist.springagram.fileservice.s3; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.security.authentication.AuthenticationManager; 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.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) @EnableRedisHttpSession public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { @Autowired SpringDataJpaUserDetailsService userDetailsService; @Autowired Environment env; @Override public void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(User.PASSWORD_ENCODER); } // Needed by Spring Security OAuth @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() // NOTE: If you add other static resources to src/main/resources, they must be // listed here to avoid security checks .antMatchers("/docs/**").permitAll() .anyRequest().authenticated() .and() .httpBasic() .and() .csrf().disable(); if (env.acceptsProfiles("ssl")) { http.requiresChannel().anyRequest().requiresSecure(); } } }