SpringBoot+SpringSecurity防护CSRF(基于Html)

关于SpringSecurity防护CSRF网上很多资料都是基于Thymeleaf(jsp)的,连官方文档也是:

但是如果是前后端分离应该怎么处理呢,也可以自己写过滤器实现,不过感觉比较麻烦;其实就算是使用Html实现也是很简单的,可以首先看看SpringSecurity防护CSRF的核心过滤器:

重点看看它的doFilterInternal()方法:

这个方法将CrsfToken存起来了,而CrsfToken也就是个很简单的接口:

再来看看到底是怎么存的呢:

也就是存在session中了,key值为静态常量DEFAULT_CSRF_TOKEN_ATTR_NAME,那前台只需要获取session中的值并保存起来,不就和使用Thymeleaf(jsp)(具体使用可参看我的另一篇博客:SpringBoot+SpringSecurity防护CSRF(基于Thymeleaf))一样了吗。但是有一个问题,session是jsp的内置对象,Html静态页面是无法直接获取session的。那就只能用别的方法(当然,也可以存在cookie里面,这样浏览器就可以获取了,具体基于cookie这篇博客说的很清楚:https://blog.csdn.net/yiifaa/article/details/78459677)。

可以在SpringSecurity最终登陆成功Handler中将存在seesion中的crsfToken返回给前台:
key值是private的,那只能将值copy出来了。

先定义一个VO返回给前台:

启动项目,登陆成功后,返回:

结合我在上一篇博客(SpringBoot+SpringSecurity防护CSRF(基于Thymeleaf))中的测试页面:

值是一模一样的,只要能将这两个值传给前台,剩下的让前台每次ajax请求都执行这个方法即可:

猜你喜欢

转载自blog.csdn.net/dongguabai/article/details/81151035
今日推荐