제트 교차 원점 필터
Jetty의 크로스 오리진 필터를 설정했지만 다음 오류가 계속 발생합니다.무엇이 문제이고 어떻게 고쳐야 하는지 아는 사람 있나요?오류 메시지 아래는 덮어쓰기 기술자(예: 보충 web.xml)입니다.
오류:
Origin http://localhost:8090 is not allowed by Access-Control-Allow-Origin.
설명자 재정의:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<filter-pattern>/*</filter-pattern>
</filter-mapping>
</web-app>
요청 헤더
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:Origin, Content-Type, Accept
Access-Control-Request-Method:POST
Connection:keep-alive
Host:localhost:8080
Origin:http://localhost:8090
Referer:http://localhost:8090/home
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.8 (KHTML, like Gecko) Chrome/17.0.942.0
응답 헤더
Allow:POST,GET,OPTIONS,HEAD
Content-Length:0
Date:Wed, 30 Nov 2011 02:13:21 GMT
Server:Jetty(7.5.4.v20111024)
알로하
잠시 동안 이것과 싸웠더니 마지막 노드는 다음과 같습니다.
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
것은 아니다.
<filter-mapping>
<filter-name>cross-origin</filter-name>
<filter-pattern>/*</filter-pattern>
</filter-mapping>
여기 도움이 되는 링크가 있습니다.wiki.eclipse.org/Jetty/Feature/Cross_Origin_Filter
web.xml 파일을 업데이트하고 jetty 서버를 재부팅한 후 jQuery ajax 호출을 사용하여 크로스 도메인 요구를 할 수 있었습니다.
롭
GAE에 배포된 웹 앱에 교차 도메인 통화를 할 때 우연히 발견했습니다.다음과 같이 Servlet 응답에 명시적 헤더를 추가할 수 있습니다.
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException
{
res.addHeader("Access-Control-Allow-Origin", "*");
...
}
또한 WAR의 루트에 다음과 같은 crossdomain.xml 정책 파일이 있는지 확인합니다.
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
<allow-access-from domain="*"/>
</cross-domain-policy>
HTH
Jetty Web Server 내의 ActiveMQ Ajax에서도 같은 문제가 발생하였습니다.문제는 허용된 헤더 필드가 "*" 형식의 와일드카드를 받아들이지 않는다는 것입니다.
ActiveMQ Ajax를 동작시키려면 allowed Methods에 Options 메서드를 추가해야 합니다.
web.xml로부터의 크로스 오리진필터:
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>GET,POST,OPTIONS,DELETE,PUT,HEAD</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>origin, content-type, accept, authorization</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
제트의 경우(jetty-version 8.1.5.v20120716)는, 「web.xml」의 다음의 행만이 도움이 됩니다.
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>GET,POST,DELETE,PUT,HEAD</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>origin, content-type, accept</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
로그 레벨을 DEBUG로 변경하고 jetty 콘솔로그에서 정보('GET, POST, DELETE, PUT, HEAD' 및 'origin, content-type, accept' 등)를 가져옵니다.예:
DEBUG CrossOriginFilter:359 - 메서드 DELETE는 허용된 메서드 중 하나입니다 [GET, POST, DELETE, PUT, HEAD]19:14:28,413
DEBUG CrossOriginFilter:389 - 헤더 [origin, content-type, accept]가 허용된 헤더[*]에 포함되지 않음
그리고 $.ajax({url:'another')로 결과를 확인했습니다.호스트', 입력: 'DELETE', ..})
많은 시간을 낭비한 후 버그 보고서를 열었습니다.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=384847
또한 파라미터 값의 와일드카드는 대부분 지원되지 않습니다(허용 헤더).
언급URL : https://stackoverflow.com/questions/8303162/jetty-cross-origin-filter
'programing' 카테고리의 다른 글
Uncaught TypeError: 정의되지 않은 SweetAlert & jquery의 속성 'then'을 읽을 수 없습니다. (0) | 2023.03.04 |
---|---|
어떻게 하면 다른 소품들을 넘겨서 반향을 일으킬 수 있을까요? (0) | 2023.03.04 |
angular-ui-modal과 부트스트랩 $modal을 사용하여 여러 단계 마법사를 만듭니다. (0) | 2023.03.04 |
Spring Boot 어플리케이션과 H2 파일 데이터베이스 (0) | 2023.03.04 |
TypeScript를 사용한 react-router- (0) | 2023.03.04 |