CorsFilter 및 스프링 보안 사용 시 Cors 오류 발생
Spring Boot을 이용하여 API 서비스를 구축하고 있습니다.인증에는 Basic Auth를 사용합니다.클라이언트가 API에 접속하려고 하면 CORS 오류가 발생합니다.
스프링 부트 시 에러가 발생.
java.displaces를 클릭합니다.부정 인수예외:allowCredentials가 true인 경우 allowOrigins는 "Access-Control-Allow-Origin" 응답 헤더에서 설정할 수 없기 때문에 특별한 값 "*"를 포함할 수 없습니다.credential을 오리진 세트에 허용하려면 명시적으로 나열하거나 대신 "allowed Origin Patterns" 사용을 고려하십시오.
allowed Origin Patterns 사용 예를 찾으려고 했지만 아직 찾지 못했습니다.https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/CorsRegistration.html#allowedOriginPatterns-java.lang.String 문서도 마찬가지입니다.Configuration에 어떤 패턴을 넣어야 하는지 아직 알 수 없습니다.allowed Origin Patterns();
아래는 제 CorsFilter 코드입니다.
@Configuration
public class RequestCorsFilter {
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.setAllowedOrigins(Collections.singletonList("*"));
config.setAllowedHeaders(Arrays.asList("Origin", "Content-Type", "Accept", "responseType", "Authorization"));
config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH"));
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
그리고 여기 내 인증 코드가 있습니다.
@Configuration
@EnableWebSecurity
public class AuthenConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth)
throws Exception {
auth
.inMemoryAuthentication()
.withUser("thor").password("{noop}P@ssw00rd")
.authorities("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
String[] AUTH_WHITELIST = {
// -- swagger ui
"/v2/api-docs",
"/swagger-resources/**",
"/configuration/ui",
"/configuration/security",
"/swagger-ui.html",
"/webjars/**"
};
http
.csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.antMatchers(AUTH_WHITELIST).permitAll() // whitelist URL permitted
.antMatchers("/api").authenticated(); // others need auth
}
}
사용하다config.setAllowedOriginPatterns("*")
대신config.setAllowedOrigins(Collections.singletonList("*"));
config.setAllowedOrigins(Collections.singletonList("*"));
이 노선은 바꿔야 합니다.응용 프로그램에 액세스할 수 있는 모든 서버를 나열해야 합니다.
예를 들어 angular를 사용하므로 프런트엔드의 개발 서버는 http://localhost:4200입니다.실제 가동 중인 서버는 https://you.server.domain.com 입니다.
설정 리스트는 다음과 같습니다.
config.setAllowedOrigins(List.of("http://localhost:4200","https://you.server.domain.com"));
프로젝트에서 포트 4000을 사용하는 경우 yml config
allowedOrigins:
- "http://localhost:4000"
http://localhost: 대체*
스프링 문서: https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/ #spring-configuration
와일드카드 "*"를 오리진에 포함할 경우 이 설정을 true로 설정할 수 없습니다.
config.setAllowCredentials(true);
그러니 그냥 제거해
Q: allowCredentials가 true입니다.allowOrigins는 특별한 값을 포함할 수 없습니다.
이것은, 에 의한 문제 해결에 도움이 됩니다.https://chowdera.com/2022/03/202203082045152102.html
결제 조건 교차 도메인 구성 오류. .allowedOrigins를 .allowedOriginPatterns로 바꿉니다.@Configuration 퍼블릭클래스 CorsConfig {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
//corsConfiguration.addAllowedOrigin("*");
// Cross domain configuration error , take .allowedOrigins Replace with .allowedOriginPatterns that will do .
// Set the domain name that allows cross domain requests
corsConfiguration.addAllowedOriginPattern("*");
corsConfiguration.addAllowedHeader("*");
// Set allowed methods
corsConfiguration.addAllowedMethod("*");
// Whether to allow certificates
corsConfiguration.setAllowCredentials(true);
// Cross domain allow time
corsConfiguration.setMaxAge(3600L);
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
} 클래스:WebMvcConfigr 인터페이스의 형식을 통해 다음과 같이 변경합니다.@Configuration 퍼블릭클래스 CorsConfig는 WebMvcConfigr { 를 구현합니다.
/** * Turn on cross domain */
@Override
public void addCorsMappings(CorsRegistry registry) {
// Set routes that allow cross domain routing
registry.addMapping("/**")
// Set the domain name that allows cross domain requests
//.allowedOrigins("*")
// Cross domain configuration error , take .allowedOrigins Replace with .allowedOriginPatterns that will do .
.allowedOriginPatterns("*")
// Whether to allow certificates (cookies)
.allowCredentials(true)
// Set allowed methods
.allowedMethods("*")
// Cross domain allow time
.maxAge(3600);
}
}
언급URL : https://stackoverflow.com/questions/66060750/cors-error-when-using-corsfilter-and-spring-security
'programing' 카테고리의 다른 글
Python을 사용하여 JSON 데이터를 파일로 예쁘게 인쇄 (0) | 2023.04.03 |
---|---|
MUI에서는 입력과폼을 작성하기 위한 TextField? (0) | 2023.04.03 |
j쿼리 투고 JSON (0) | 2023.03.29 |
Plone은 다른 CMS에 충분히 대응하고 있습니까? (0) | 2023.03.29 |
Jackson @JsonProperty(필수=true)가 예외를 발생시키지 않음 (0) | 2023.03.29 |