DWR에 나타난 A request has been denied as a potential CSRF attack 해결 방법
4254 단어 DWR
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<script type="text/javascript" src="scripts/engine.js"></script>
<script type="text/javascript" src="scripts/util.js"></script>
<script type="text/javascript" src="dwr/interface/service.js"></script>
<script type="text/javascript">
function firstDwr(){
service.sayHello("Tom",function(data){
alert(data);
});
}
</script>
런타임 시 다음 오류가 발생했습니다.
2011-7-8 12:42:28 org.directwebremoting.util.CommonsLoggingOutput error
: A request has been denied as a potential CSRF attack.
Google은 많은 사람들이 이 오류를 겪고 있음을 발견했습니다. 그 중 하나는 다음과 같습니다.
웹 수정.xml 파일, 추가
crossDomainSessionSecurity 초기화 매개 변수
false 구성은 다음과 같습니다.
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
corss Domain Session Security 이 설정 옵션은dwr 버전 2.0에서만 사용할 수 있으며 기본값은true입니다. 즉 다른 필드에서 요청을 보내는 것을 금지합니다. corss Domain Session Security는false로 설정하여 다른 영역에서 요청을 할 수 있습니다. 이렇게 하면 안전성에 대한 모험이 있을 수 있습니다.
다시 화호 테스트를 할 때 상기 오류를 보고하지 않았습니다. 컨트롤러는 다음과 같은 정보를 보냈습니다.
2011-7-8 12:57:25 org.directwebremoting.util.CommonsLoggingOutput info
: Exec: service.sayHello()
그러나 실행 결과가 없습니다. 브라우저에 해당하는 정보가 뜨지 않았습니다.
IE 테스트를 사용할 때 IE 브라우저에 다음과 같은 오류가 표시됩니다.
:
: 980
: 3
: 0
URI: http://localhost:8080/DwrTest/jslib/engine.js
설마 도입된 js 파일에 문제가 있는 건 아니겠지. 테스트를 통해 최종적으로 문제가 발견됐어. dwr.jar의 org.directwebremoting 패키지에engine가 이미 존재합니다.js와util.js, 그럼 이 두 파일을 프로젝트에 다시 도입할 필요가 없지 않습니까?그래서 나는engine.js와util.js 이 두 파일과scripts 폴더를 프로젝트에서 삭제하고 jsp의 도입 방식을 다음과 같이 변경합니다.
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/service.js"></script>
동시에 웹을xml에 추가된crossDomainSessionSecurity 설정 항목 삭제xml은 다음과 같이 변경되었습니다.
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
그리고 프로그램을 실행해서 정확하게 실행합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
DWR에서 클래스 이름을 팝업하고 메서드에 들어가지 않는 이유입력 정보 상자를 작성하고 번호를 작성할 때 번호가 존재하는지 확인하고 DWR 테스트를 할 때 대응하는 클래스 이름을 팝업하여 클래스에 들어가는 방법이 없습니다(방법 안에 단점이 있음).어느 분께서 잘못이 어디에 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.