开发者学堂课程【Spring Security知识精讲与实战演示(一):Spring Security关闭csrf拦截】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/730/detail/13034
Spring Security关闭csrf拦截
目前已经可以让 Spring Security 使用自己定义的认证页面。那么这个页面到底能否正常页面认证通过认证?接下来做一个测试:
在测试之前需要注意现在需要用 Spring Security 的认证必须将登录的请求的地址改成 Spring Security 的认证路径。
找到 login 页面找到 from 表单的 url 提交地址。
在静态的时候会跳转到 idex.jps,现在必须要经过处理器,这个处理器不是自己写的,是 Spring Security 处理器提供的。还需要注意一个细节:method 后面必须是post。为什么是 post,而不能用 get 呢?在源码中判断就必须是 post。修改之后刷新。
如果在下图中配置了,就可以不刷新了。在下图中的 on frame deactivation 选择update classess and resources 自动更新,上面的不用改变。但是也有一个弊端:需要经常清理缓存。
回到页面上,用户名输入user。依然是内存中的用户。如下图:依然是标蓝的用户。
虽然现在用的是自己的认证页面,但是与数据库中的用户信息是没有关系的。现在并没有连数据库认证。所以登录的用户名依然是 user。
点击登录。发现出现了问题:如下图
这个问题与之前的问题有些不一样。之前都是404或者500.现在的是403.403指的是权限不足。之前在后台中看到的side、indefond,指的就是这里的403.但是这里的权限不足指的不是没有权限而不足。难道连访问 localhost。8080/login 的权限都没有吗?
之前在做下图页面认证的时候。F12看了一个东西
下图中箭头所指内容隐藏了一些信息:
问题就在这行信息中。如果想要让正常通过,需要加上这行信息,但是还可以采用别的方式。可以不让这行信息起作用。也就是现在想要测验证有两种方式:1、不让csrf拦截;2、专门做csrf拦截。
接下来演示这两种操作。
1、不让 csrf 拦截
先登录通过。怎么不拦截,需要写上:去掉 CSRF 拦截的过滤器
在刚刚讲解的15个过滤器中有去掉 CSRF 拦截的过滤器,在默认页面中。因为有去掉CSRF拦截的过滤器,csrf 内部机制怎么做之后会讲解,现在先不要让这个问题干扰正常认证。先将其关闭(再次启动过滤器,这个项目就没了)。
直接写security:csrf disabled(不起作用)=“true”这样操作之后刚刚的CSRF拦截的过滤器就没了。这时需要注意尽量不要刷新了。因为ID 页面的版本不一样,有些版本可能刷新好用,但是有些ID版本刷新并不能重新加载 WEB-INF。也就是过滤器链中的东西有会一直有。因此这里最好重新启动。
这个是与ID的配置相关的,但是为了不出问题,都统一重新启动比较保险。(如果嫌比较麻烦,可以先刷新一次,出问题了再重新启动即可)
继续输入 user,点击登录。现在的主页面就可以正常登录了。但是现在的页面可能会被 csrf 攻击,因为现在没有 csrf 的管理了,之前关闭了 csrf。真正出于安全考虑,应该将它打开。