`
ymgjava
  • 浏览: 22765 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DWR出现的A request has been denied as a potential CSRF attack解决办法

    博客分类:
  • DWR
DWR 
阅读更多
学习DWR的时候,用的是DWR2.0.6版本和火狐浏览器,在做官方的Hello world 的时候,按照文档,做的如下配置:
<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了一把,发现很多人都出现了这个错误,其中网上的一个解决方法是:
修改web.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>

corssDomainSessionSecurity这个配置选项是在dwr版本2.0才有的,默认值为true,也就是禁止其他域发送请求,corssDomainSessionSecurity设置成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>

同时把web.xml中新增的crossDomainSessionSecurity配置项删除,既web.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>

然后再运行程序,正确执行。
分享到:
评论

相关推荐

    DWR框架实例及常见问题解决办法,免费放送

    在DWR实例中,你可能会遇到以下常见问题及其解决办法: 1. **跨域问题**:DWR默认支持跨域,但如果遇到问题,可以检查配置文件`dwr.xml`中的跨域设置,或者使用CORS策略。 2. **缓存问题**:如果页面上的数据没有...

    dwr dwrdwr

    dwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwr

    DWR中文文档DWR

    - **安全机制**:DWR提供了防止XSS(跨站脚本攻击)和CSRF(跨站请求伪造)的安全机制,确保应用安全性。 2. **配置**: - **web.xml**:在Web应用的部署描述符中配置DWR的Servlet,如`dwr-servlet.xml`,设置...

    DWR3.0.jar、DWR.war和DWR2.0中文说明文档

    然而,需要注意的是,虽然DWR简化了Ajax开发,但在大型复杂项目中,可能需要考虑其他更现代的解决方案,如使用WebSocket或React、Vue等前端框架结合后端API进行通信。此外,随着技术的发展,DWR可能不再是最新的工具...

    dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;

    dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;

    dwr 框架dwr 框架dwr 框架dwr 框架dwr 框架dwr 框架

    dwr 框架dwr 框架dwr 框架dwr 框架dwr 框架dwr 框架

    较全面DWR包

    5. **示例和文档**:有时,DWR包中可能还包括示例代码和文档,帮助开发者了解如何初始化DWR,设置远程调用,以及如何处理可能出现的问题。 为了正确使用DWR,你需要在项目中进行以下步骤: 1. 将所有解压的JAR文件...

    DWR框架DWR框架

    例如,在压缩包内的文件"A051]使用DWR开发AJAX+For+J2EE.wrf"可能是一个演示或者教程,详细介绍了如何使用DWR框架在J2EE环境中构建AJAX应用。这个文件可能涵盖从安装DWR,配置web.xml,编写可远程调用的Java类,到在...

    jquery和dwr.utls冲突解决

    要解决`jquery`和`dwr.utls`之间的冲突,我们可以采用以下策略: 1. **使用`jQuery.noConflict()`**:这是jQuery提供的一种机制,用于释放`$`变量的控制权,从而避免与其它库(如DWR)的冲突。通过调用`jQuery....

    ajax的dwr包

    2. **安全机制**:DWR内置了CSRF(跨站请求伪造)防护,确保只有合法的请求才能被处理。 3. **缓存管理**:DWR支持对客户端和服务器端的缓存进行管理,提高性能。 4. **调试工具**:DWR提供了一个控制台工具,帮助...

    dwr学习教程3

    DWR的出现是为了克服AJAX中XMLHTTPRequest对象只能发送简单GET和POST请求的限制,让开发者可以直接调用服务器端的Java方法,返回数据可以是JSON、XML或其他格式,简化了前后端交互的复杂性。 二、DWR核心组件 1. *...

    dwr源码运行即可

    2. **安全性**:DWR提供了一套安全机制,如CSRF(Cross-Site Request Forgery)防护,确保跨站请求的合法性。 3. **缓存管理**:DWR支持对远程调用结果的缓存,提高页面响应速度。 4. **异步通信**:通过AJAX技术...

    dwr+spring实例

    DWR的出现极大地增强了Web应用的用户体验,因为它允许开发者创建几乎与桌面应用一样的交互式界面。在结合Spring框架时,DWR可以更方便地集成到现有的Spring应用中,实现更灵活的服务调用和状态管理。 本实例"DWR...

    Dwr3.0 与 Dwr2.0 区别

    ### DWR 3.0 与 DWR 2.0 的区别 DWR(Direct Web Remoting)是一种用于简化 AJAX 应用程序开发的技术。它允许客户端 JavaScript 直接调用服务器端 Java 方法,从而降低了 AJAX 编程的复杂度。DWR 的最新版本为 3.0...

    DWR中文文档

    4. **DWR的安全性**:DWR提供了安全机制,如CSRF(跨站请求伪造)防护,通过使用Token来防止恶意的跨站请求。同时,也可以通过设置白名单来限制可以调用的Java类和方法。 5. **使用DWR进行AJAX调用**:DWR提供了...

    dwr.jar/dwr-2.0.5-src.zip/dwr.zip

    - **安全控制**:DWR有内置的安全机制,如CSRF防护和IP白名单,以防止未授权的访问。 - **易于集成**:DWR可轻松与各种Java Web框架(如Spring、Struts等)集成,提供丰富的Web应用增强功能。 5. **使用DWR**: ...

    DWR框架学习demo

    - DWR提供了安全性机制,如CSP(Content Security Policy)和白名单,以防止跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。 **5. 示例war包和jar包** - **war包**: 通常包含了一个示例Web应用,展示了如何在实际项目中...

    dwr小项目及资料

    在实践中,需要注意DWR的安全设置,例如防止跨站脚本攻击(XSS)和跨站请求伪造(CSRF),并合理设计接口,以确保良好的性能和可维护性。同时,DWR也提供了缓存机制,以减少不必要的服务器请求,提高应用效率。

    dwr 代码 下载

    Direct Web Remoting (DWR) 是一...5. **实践应用**:尝试将DWR应用到你的实际项目中,解决可能出现的问题。 通过以上步骤,你可以深入理解DWR的工作机制,并熟练掌握其使用,从而在你的Web开发中充分利用AJAX的优势。

Global site tag (gtag.js) - Google Analytics