| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package com.common.workflow.config;
- import com.common.workflow.security.*;
- import com.common.workflow.security.jwt.*;
- import org.springframework.beans.factory.BeanInitializationException;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.context.annotation.Import;
- import org.springframework.http.HttpMethod;
- 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.builders.WebSecurity;
- import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
- import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
- import org.springframework.security.config.http.SessionCreationPolicy;
- import org.springframework.security.core.userdetails.UserDetailsService;
- import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
- import org.springframework.security.crypto.password.PasswordEncoder;
- import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
- import org.springframework.web.filter.CorsFilter;
- import org.zalando.problem.spring.web.advice.security.SecurityProblemSupport;
- import javax.annotation.PostConstruct;
- @Configuration
- @EnableWebSecurity
- @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
- @Import(SecurityProblemSupport.class)
- public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
- private final AuthenticationManagerBuilder authenticationManagerBuilder;
- private final UserDetailsService userDetailsService;
- private final TokenProvider tokenProvider;
- private final CorsFilter corsFilter;
- private final SecurityProblemSupport problemSupport;
- public SecurityConfiguration(AuthenticationManagerBuilder authenticationManagerBuilder, UserDetailsService userDetailsService, TokenProvider tokenProvider, CorsFilter corsFilter, SecurityProblemSupport problemSupport) {
- this.authenticationManagerBuilder = authenticationManagerBuilder;
- this.userDetailsService = userDetailsService;
- this.tokenProvider = tokenProvider;
- this.corsFilter = corsFilter;
- this.problemSupport = problemSupport;
- }
- @PostConstruct
- public void init() {
- try {
- authenticationManagerBuilder
- .userDetailsService(userDetailsService)
- .passwordEncoder(passwordEncoder());
- } catch (Exception e) {
- throw new BeanInitializationException("Security configuration failed", e);
- }
- }
- @Override
- @Bean
- public AuthenticationManager authenticationManagerBean() throws Exception {
- return super.authenticationManagerBean();
- }
- @Bean
- public PasswordEncoder passwordEncoder() {
- return new BCryptPasswordEncoder();
- }
- @Override
- public void configure(WebSecurity web) throws Exception {
- web.ignoring()
- .antMatchers(HttpMethod.OPTIONS, "/**")
- .antMatchers("/swagger-ui/index.html")
- .antMatchers("/test/**");
- }
- @Override
- public void configure(HttpSecurity http) throws Exception {
- http
- .csrf()
- .disable()
- .addFilterBefore(corsFilter, UsernamePasswordAuthenticationFilter.class)
- .exceptionHandling()
- .authenticationEntryPoint(problemSupport)
- .accessDeniedHandler(problemSupport)
- .and()
- .headers()
- .frameOptions()
- .disable()
- .and()
- .sessionManagement()
- .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
- .and()
- .authorizeRequests()
- .antMatchers("/api/acti/**").permitAll()
- .antMatchers("/api/apose/**").permitAll()
- .antMatchers("/api/word/**").permitAll()
- .antMatchers("/api/register").permitAll()
- .antMatchers("/api/activate").permitAll()
- .antMatchers("/api/authenticate").permitAll()
- .antMatchers("/api/account/reset-password/init").permitAll()
- .antMatchers("/api/account/reset-password/finish").permitAll()
- .antMatchers("/api/**").authenticated()
- .antMatchers("/management/health").permitAll()
- .antMatchers("/management/info").permitAll()
- .antMatchers("/management/**").hasAuthority(AuthoritiesConstants.ADMIN)
- .and()
- .apply(securityConfigurerAdapter());
- }
- private JWTConfigurer securityConfigurerAdapter() {
- return new JWTConfigurer(tokenProvider);
- }
- }
|