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