针对CSRF跨站请求伪造,JFinal-layui主要是对添加、修改的业务表单加入token验证机制,这样就可以解决重要业务操作的安全性。我们的拦截是全局验证拦截,在开发功能过程中就是顺手做的事情,简单高效。
1、因为在后端统一对save()、update()进行了token认证拦截,所以在开发添加、修改功能过程中,记得在表单中输出token:#(token)
2、如果是其他的方法需要用到token认证,首先就要在进入页面的方法调用createToken(),然后在数据提交的方法上面调用@Before(TokenValidator.class),如修改密码表单的token认证实现如下:
/** * 在页面方法创建token */ public void myPassword(){ createToken(); setAttr("userCode",getVisitor().getCode()); render("my/password.html"); } /** * 修改个人密码(验证token) */ @Before(TokenValidator.class) public void updateMypassword(){ Visitor vs=getVisitor(); if(!vs.getCode().equals(getPara("userCode"))){ getResponse().setStatus(403); renderError(403); } String oldPassword=getPara("oldPassword"); String newPassword=getPara("newPassword"); try { oldPassword=RSAKit.decryptionToString(oldPassword); newPassword=RSAKit.decryptionToString(newPassword); } catch (Exception e) { handerException(e); } boolean b=service.updatePassword(vs.getCode(), newPassword, oldPassword); if(b){ setAttr("msg", "密码修改成功"); }else{ createToken(); setException("原密码错误,密码修改失败"); } setAttr("userCode", vs.getCode()); render("my/password.html"); }
最后就是在修改密码页面的form表单输出token: