| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package com.its.bis.webapp.config;
- import com.its.bis.webapp.security.SessionListener;
- import com.its.bis.webapp.service.UserService;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.http.HttpMethod;
- 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.session.SessionRegistry;
- import org.springframework.security.core.session.SessionRegistryImpl;
- import org.springframework.web.cors.CorsConfiguration;
- import org.springframework.web.cors.CorsConfigurationSource;
- import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
- import javax.servlet.http.HttpSessionListener;
- @EnableWebSecurity
- @Configuration
- public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
- private final UserService userService;
- public WebSecurityConfig(UserService userService) {
- this.userService = userService;
- }
- @Override
- public void configure(WebSecurity web) throws Exception {
- web.ignoring().antMatchers("/favicon.ico");
- web.ignoring().antMatchers("/css/**", "/js/**", "/img/**", "/lib/**");
- web.ignoring().antMatchers(HttpMethod.GET, "/api/**"); // GET Method 는 모두 통과
- web.ignoring().antMatchers(HttpMethod.POST, "/api/**"); // GET Method 는 모두 통과
- web.ignoring().antMatchers(HttpMethod.PUT, "/api/**"); // GET Method 는 모두 통과
- web.ignoring().antMatchers(HttpMethod.DELETE, "/api/**"); // GET Method 는 모두 통과
- }
- @Override
- protected void configure(HttpSecurity http) throws Exception {
- http
- .httpBasic().disable()
- .cors().configurationSource(corsConfigurationSource())
- .and()
- .csrf().disable()
- .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
- .and()
- .authorizeRequests()
- // SWAGGER 권한 설정
- .antMatchers("/swagger-ui.html", "/swagger/**", "/swagger-resources/**", "/webjars/**", "/v2/api-docs").permitAll()
- // 웹소켓 권한 설정하지
- .antMatchers("/ws/**").permitAll()
- .antMatchers("/api/**").permitAll()
- .anyRequest().permitAll()
- ;
- }
- // CORS 허용 적용
- @Bean
- public CorsConfigurationSource corsConfigurationSource() {
- CorsConfiguration corsConfig = new CorsConfiguration();
- corsConfig.setAllowCredentials(true); // cross origin 으로부터 인증을 위한 쿠키 정보를 받을지 여부
- corsConfig.addAllowedOriginPattern("*"); // addAllowedOrigin("*") 대신 사용, 허용할 origin 정보, Arrays.asList("http://localhost:8080")
- corsConfig.addAllowedHeader("*");
- corsConfig.addAllowedMethod("*"); // 허용할 http methods. Arrays.asList("GET", "POST")
- UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
- source.registerCorsConfiguration("/**", corsConfig);
- return source;
- }
- @Bean
- public SessionRegistry sessionRegistry() {
- return new SessionRegistryImpl();
- }
- @Bean
- public HttpSessionListener httpSessionListener() {
- return new SessionListener();
- }
- }
|