fix: cors Sesurity 적용

dev
minuk926 2 years ago
parent fbcfb02931
commit 66672777ac

@ -1 +1,15 @@
# xit-framework #### CORS 에러: The request client is not a secure context and the resource is in more-private address space `local`.
```text
공인 IP대역에서 http POST 요청으로 text 타입 데이타 전송시 발생
웹서비스를 개발 하던 중 위와 같은 에러를 만났다.
서버 응답에 Access-Control-Allow-Origin: * 와 같은 CORS 허용 헤더를 다 넣어줬지만,
위와 같은 에러가 계속 발생했다. 알고보니 origin 보다, 더 낮은 수준의 네크워크로 요청을 보내는 경우,
위와같이 에러를 발생한다.
이를 해결하기 위해서는 브라우져 설정에서, 위와 같은 제한을 해제해주어야 한다.
그리고 당연한 소리겠지만, 운영 환경에서는 위와 같은 상황이 발생하면 안된다.
크롬의 경우: chrome://flags/#block-insecure-private-network-requests 에 들어가서 설정 disabled
엣지의 경우: edge://flags/#block-insecure-private-network-requests 에 들어가서 설정 disabled
```

@ -15,6 +15,7 @@ import com.xit.core.oauth2.oauth.handler.TokenAccessDeniedHandler;
import com.xit.core.oauth2.oauth.repository.OAuth2AuthorizationRequestBasedOnCookieRepository; import com.xit.core.oauth2.oauth.repository.OAuth2AuthorizationRequestBasedOnCookieRepository;
import com.xit.core.oauth2.oauth.JwtTokenProvider; import com.xit.core.oauth2.oauth.JwtTokenProvider;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
@ -27,6 +28,7 @@ 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.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsUtils; import org.springframework.web.cors.CorsUtils;
@ -161,6 +163,14 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
*/ */
@Override @Override
protected void configure(HttpSecurity http) throws Exception { protected void configure(HttpSecurity http) throws Exception {
/**
* @EnableAsync
* SecurityContextHolder .
* ThreadLocal Thread .
* MODE_INHERITABLETHREADLOCAL : Thread SecurityContext .
*/
SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL);
http http
.cors() .cors()
.and() .and()
@ -184,6 +194,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
// GET, POST 요청시 : OPTIONS preflight 요청 - 실제 서버가 살아있는지를 사전에 확인하는 요청 // GET, POST 요청시 : OPTIONS preflight 요청 - 실제 서버가 살아있는지를 사전에 확인하는 요청
// Spring에서 OPTIONS에 대한 요청을 막고 있어 OPTIONS 요청이 왔을 때도 오류를 리턴하지 않도록 설정 // Spring에서 OPTIONS에 대한 요청을 막고 있어 OPTIONS 요청이 왔을 때도 오류를 리턴하지 않도록 설정
.requestMatchers(CorsUtils::isPreFlightRequest).permitAll() .requestMatchers(CorsUtils::isPreFlightRequest).permitAll()
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
.mvcMatchers(HttpMethod.OPTIONS, "/**").permitAll() .mvcMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.antMatchers( .antMatchers(
"/", "/",

@ -68,7 +68,7 @@ spring:
# Spring Security cors 설정 :: CorsConfiguration 설정 값 # Spring Security cors 설정 :: CorsConfiguration 설정 값
cors: cors:
allowed-origins: http://localhost:3000, http://localhost:8088, http://211.119.124.9 allowed-origins: http://localhost:3000,http://localhost,http://211.119.124.9
allowed-methods: GET,POST,PUT,DELETE,OPTIONS allowed-methods: GET,POST,PUT,DELETE,OPTIONS
allowed-headers: '*' allowed-headers: '*'
max-age: 3600 max-age: 3600

Loading…
Cancel
Save