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

配置Spring MVC XML

<mvc:interceptors>   
        <mvc:interceptor>  
            <mvc:mapping path="/**"/> 
              
           <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表单弹出框
如:

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

"button" value="新增用户" />

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的情况
如:

"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中需还有

type="hidden" name="CSRFToken" value="${CSRFToken }">

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;
    }

你可能感兴趣的:(spring)