安全框架主要实现:
提示:认证和授权
例如:
1、 掌握认证和授权
2、 剖析源码
入门案例:
搭建一个springboot的web工程主要依赖如下:
编写一个测试接口:
通过浏览器url访问该接口:
默认登录用户:user
密码控制台打印的:
这样就完成了一个简单的入门级demo。
security的基本原理:
security的本质上一个过滤器链:
重点是三个过滤器:
(1)FilterSecurityInterceptor::是一个方法级的权限过滤器, 基本位于过滤链的最底部。
查看源码得知该类实现了Filter说明该类是一个过滤器:
super.beforeInvocation(fi) 表示查看之前的 filter 是否通过。
fi.getChain().doFilter(fi.getRequest(), fi.getResponse());表示真正的调用后台的服务。
(2)ExceptionTranslationFilter:是个异常过滤器,用来处理在认证授权过程中抛出的异常
(3)UsernamePasswordAuthenticationFilter :对/login 的 POST 请求做拦截,校验表单中用户
名,密码。
security的过滤器怎么进行加载的:
通过FilterChainProxy加载到一个list中去的。
如何实现在数据库中查询接口:
(1)UserDetailsService 接口讲解
当什么也没有配置的时候,账号和密码是由 Spring Security 定义生成的。而在实际项目中
账号和密码都是从数据库中查询出来的。 所以我们要通过自定义逻辑控制认证逻辑。如果需要自定义逻辑时,只需要实现 UserDetailsService 接口即可。
*创建类继承UsernamePasswordAuthenticationFilter,重写三个方法
*创建类实现UserDetailService,编写查询数据过程,返回User对象,这个User对象是安全框架提供对象。
(2)PasswordEncoder 接口讲解
提供密码加密。
web权限方案
(1)认证
(2)授权
设置登录系统的账号、密码
方式一:在 application.properties
方式二:编写类实现接口
注意必须将passwordEncoder注入进来,因为会去找里面的对象。
方式三:实现数据库认证来完成用户登录(自定义)
数据库查询完成数据库操作:
引入依赖:
配置mappersacn扫描包
编写这个服务:
该方法是通过名字查询出该用户