前言:
尚硅谷教程
前置知识
入门案例:
- 第一步:创建一个springboot项目
第二步:导入依赖:1.springboot-starter-web、2.springboot-starter-security
<!--添加SpringSecurity的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
第三步:编写一个controller测试
@RestController @RequestMapping("/test") public class TestController { @GetMapping("hello") public String Test(){ return "Hello SpringScurity"; } }
测试:
- 输入账号:user
- 密码:
SpringSecurity的基本原理
- 注意:这里是看得jdk的源码实现的,可以在idea搜索快捷键(ctrl+shift+n)去查看源码
web权限方案:
配置文件方式:
配置类方法:自定义编写实现类:
查询数据库认证来完成用户登录
遇到的问题:
why? 为什么我这entity的实体类的名字一定要跟数据库的表名一样,不可以自定义嘛?
自定义设置登录页面不需要认证可以访问
步骤:1
- 2:编写controller请求
3:写前端页面form表单提交
测试
遇到的问题:
这个我在写controller 的时候把这个get写出了post,所有我测试的时候报错403请求方式不对,犯了一个低级错误。
基于角色或权限进行访问控制
步骤
1.添加2行权限的代码
业务的层权限的设置
测试:权限不对,报错
修改:
两个权限一直才能访问
效果:
遇到的问题:
这个hasAnyAuthority(“admins”)方法设置权限和
List<GrantedAuthority> auths = AuthorityUtils
.commaSeparatedStringToAuthorityList("admins");
一致才能访问页面嘛?
- 第三种方法:hasRole方法
步骤1:
//3.hasRole方法 ROLE_sale
.antMatchers("/test/index").hasRole("sale")
步骤2:
List
第四个方法:hasAnyRole
自定义的403权限页面
常用注解的使用
第二个注解:@PreAuthorize
第三个注解:@PostAuthorize
其他的注解不常用
用户注销
- 1.在登录页面添加一个退出
- 2.在配置类中添加退出映射
- 3.测试
记住我
- 1.创建表
- 2.添加数据库的配置文件
- 3.编写配置类
- 4.修改安全配置类
- 5.页面添加记住我复选框
- 6.使用张三进行登录测试
- 7.设置有效期
CSRF理解(跨站请求伪造)
SpringSecurity微服务权限方案
表的创建
- 1.权限管理数据模型
- 2.案例涉及技术说明