前言
在未接触 SpringSecurity 、Shiro 等安全认证框架之前,如果有页面权限需求需要满足,通常可以用拦截器,过滤器来实现。
但是,这需要大量配置类去完成,代码编写工作量是巨大的。为提高工作效率,学习SpringSecurity 等框架变得十分必要。
环境
IDEA :2020.1
Maven:3.5.6
SpringBoot: 2.3.2
MySQL 8.0
1、导入正确的依赖
org.springframework.boot spring-boot-starter-security
也可以在构建工程师勾选
另外,笔者使用的模板引擎是 Thymeleaf ,因此也需要导入该依赖,不适用该模板引擎的不需要导入该依赖。
org.thymeleaf thymeleaf-spring5 org.thymeleaf.extras thymeleaf-extras-java8time
2、编写或导入页面素材,HTML页面等
读者可以自行编写,除了login 页面必须要有 form 表单提交,以便处理登录请求外,其他页面可根据需要编写。
一般提交表单,这样写是没有问题的,但是,我们添加了 spring-boot-starter-security 依赖,使用了SpringSecurity ,提交所有表单(包括这次的登录表单),都会交由SpringSecurity 处理。
SpringSecurity 默认开启了防止跨域攻击的功能,任何 POST 提交到后台的表单都要验证是否带有 _csrf 参数,一旦传来的 _csrf 参数不正确,服务器便返回 403 错误;
上述写法,我们可以访问后,在调试模式查看元素。
是没有 _csrf 参数的,这样提交的时候将会被拦截。
提交表单403解决方法#
1、直接关闭防止域攻击功能。(可以在下面介绍到的配置类中使用)
http.csrf().disable()
这样的做法是不建议的,安全级别会降低。有违使用 SpringSecurity 的初衷。