CSRF spring mvc 跨站请求伪造防御,使用详解--基于上篇文章

配置Spring MVC XML

<mvc:interceptors>   
        <mvc:interceptor>  
            <mvc:mapping path="/**"/> 
            <!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 -->  
           <bean class="com.dimeng.abilitys.interceptor.AvoidCSRFInterceptor"/>  
        </mvc:interceptor>  
    </mvc:interceptors>  

场景:
1.页面中的Form表单提交,提交后刷新页面

jsp 页面
<form action="update.do" method="">
    <input type="hidden" name="CSRFToken" value="${CSRFToken }"></input>
</form>
配置controller注解
    /**
     * 
     * <功能详细描述>
     */
    @RequestMapping(value = "/update.do")
    @VerifyCSRFToken(verifyCSRFToken=true)
    public ModelAndView update(String id, HttpServletRequest request,
        HttpServletResponse response)
    {
        //业务处理
        return new ModelAndView("home");
    }

2.从后台获取的form表单弹出框
如:

点击按钮,异步请求页面后渲染到页面中

<input type="button" value="新增用户" />
<script>
...
Ajax.get("getUpdateForm.do")//不做具体实现
</script>

getUpdateForm.jsp

<form action="update.do" method="" id="updateForm">

</form>
<script>
    //将CSRFToken放入form表单中,
    var csrfToken = $("input[name='CSRFToken']").val();
    var _input = Document.createElementByName("input");
    _input.name="CSRFToken";_input.val="csrfToken";
    $("#updateForm").append(_input );
</script>

配置Controller注解

    /**
     * 
     * <功能详细描述>
     */
    @RequestMapping(value = "/getUpdateForm.do")
    public ModelAndView getUpdateForm(HttpServletRequest request,
        HttpServletResponse response)
    {
        return new ModelAndView("getUpdateForm.jsp");
    }

3.超链接请求页面是需要改变token的情况
如:

<a href="xxx.do"/>
window.loaction.href="xxx.do";...

配置Controller注解

    /**
     * 
     * <功能详细描述>
     */
    @RequestMapping(value = "/xxx.do")
    @RefreshCSRFToken(refreshCSRFToken=true)
    public ModelAndView xxx(HttpServletRequest request,
        HttpServletResponse response)
    {
        return new ModelAndView("home.jsp");
    }

home.jsp中需还有

<input type="hidden" name="CSRFToken" value="${CSRFToken }"></input>

4.ajax请求,使用之前定义好的ajax,如:company.ajax

company.ajax(
{
    url:xxx.do,
    success:callback
});

配置Controller注解

    /**
     * 
     * <功能详细描述>
     */
    @RequestMapping(value = "/xxx.do")
    @VerifyCSRFToken(verifyCSRFToken=true)
    public Object xxx(HttpServletRequest request,
        HttpServletResponse response)
    {
        //业务处理
        return JSONObject;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值