Spring Boot 앱의 웹 소켓 - 403 금지
Spring Boot 앱의 웹 소켓 - 403 금지
이클립스(스프링 부트 없음)에서 실행할 때 클라이언트에서 sockjs/stompjs를 사용하여 웹 소켓에 연결할 수 있습니다.
그러나 웹 소켓코드용 Spring boot jar(gradw build)를 생성하여 java -jar websocket-code.jar를 실행하면 웹 소켓에 접속할 때 403 오류가 발생합니다.
웹소켓에 대한 인증이 없습니다.저는 CORS 필터를 가지고 있고, 모든 헤더가 올바른 요청/응답에 있다고 생각합니다.
아래는 나의 build.gradle입니다.
apply plugin: 'java'
apply plugin: 'spring-boot'
apply plugin: 'war'
sourceCompatibility = 1.7
version = '1.0'
repositories {
mavenCentral()
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE")
}
}
configurations {
compile.exclude module: "spring-boot-starter-tomcat"
}
dependencies {
compile "org.springframework:spring-web:$spring_version"
compile "org.springframework:spring-webmvc:$spring_version"
compile "org.springframework:spring-websocket:$spring_version"
compile "org.springframework:spring-messaging:$spring_version"
compile "org.springframework.boot:spring-boot-starter-websocket"
compile "org.springframework.boot:spring-boot-starter-web"
compile "com.fasterxml.jackson.core:jackson-databind:2.6.2"
compile "com.fasterxml.jackson.core:jackson-core:2.6.2"
compile "com.fasterxml.jackson.core:jackson-annotations:2.6.2"
compile "org.springframework.amqp:spring-rabbit:1.3.5.RELEASE"
compile("org.springframework:spring-tx")
compile("org.springframework.boot:spring-boot-starter-web:1.2.6.RELEASE")
compile("org.springframework.boot:spring-boot-starter-jetty:1.2.6.RELEASE")
testCompile group: 'junit', name: 'junit', version: '4.11'
testCompile "org.springframework:spring-test:$spring_version"
}
task wrapper(type: Wrapper) {
gradleVersion = '2.5'
}
업데이트:
응답 기능이 있는 CORS 필터 추가.setHeader("액세스 제어 허용 오리진", "http://localhost:8089");
클라이언트 측에서 firebug 중
Request Headers
Origin
http://localhost:8089
Response Headers
Access-Control-Allow-Origin
http://localhost:8089
Server Logs
2015-10-02 16:57:31.372 DEBUG 1848 --- [qtp374030679-14] o.s.w.s.s.t.h.DefaultSockJsService : Request rejected, Origin header value http://localhost:8089 not allowed
요청하려는 발신지는 Allow-origin 목록에 있습니다.로그에 Request Rejected 메시지가 아직 표시됩니다.
같은 문제가 발생하여 WebSocketConfig에서 허용된 출처를 "*"로 설정하여 수정했습니다.
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
// the endpoint for websocket connections
registry.addEndpoint("/stomp").setAllowedOrigins("*").withSockJS();
}
// remaining config not shown as not relevant
}
추가하려고 하다
registry.addEndpoint("/your-end-point").setAllowedOrigins("*").withSockJS();
컨트롤러의 @SendTo에 의해 "당신의 엔드 포인트"가 등록됩니다.
나의 두 환경의 차이점은 항아리 버전이었다.
spring-boot-starter-websocket-1.2.5.RELEASE.jar
spring-websocket-4.1.7.RELEASE.jar
패키징 중 스프링 부트 스타터 웹 소켓 의존성 때문에 스프링 웹 소켓-4.1.7을 사용하고 있었습니다.spring_version=4.0.6인 spring_version의 inspite를 해제합니다.풀어주다.
문제를 수정하는 build.gradle 의존관계를 수정.
compile "org.springframework.boot:spring-boot-starter-websocket:1.1.0.RELEASE"
spring-websocket jar의 최신 버전에서는 StompWebSocketEndpointRegistration 클래스가 사용해야 하는 AllowedOrigins 메서드를 설정했다고 생각합니다.이거 먹어본 적 없어.
하지만 CORS 필터는
response.setHeader("Access-Control-Allow-Origin", "http://localhost:8089");
이전 버전으로 동작하고 있습니다.
참고로 스프링의 새로운 버전에는 다른 방법이 필요합니다.
registry.addEndpoint("/websocket-connection").setAllowedOriginPatterns("*").withSockJS();
언급URL : https://stackoverflow.com/questions/32874421/websocket-in-spring-boot-app-getting-403-forbidden
'programing' 카테고리의 다른 글
AngularJS: Angular 외부에서 서비스를 업데이트해야 합니다. (0) | 2023.03.01 |
---|---|
WooCommerce: 코드로 제품 생성 (0) | 2023.03.01 |
WooCommerce get_sku(); 제품 바리에이션 순서 (0) | 2023.03.01 |
Spring ResponseStatusException이 이유를 반환하지 않음 (0) | 2023.03.01 |
react/typescript: 매개 변수 'props'에 암시적으로 '임의' 형식 오류가 있습니다. (0) | 2023.03.01 |