spring security主要功能:
1.认证——是什么身份
2.授权——有哪些权限
接下来演示如何使用(基于内存):
以上是入门演示,security本质是一个过滤器链,主要有三大过滤器:
1.FilterSecurityInterceptor——方法级权限过滤器,位于过滤链最底部
2.ExceptionTranslationFilter——异常过滤器,用来处理认证授权中抛出的异常
3.UsernamePasswordAuthenticationFilter——对登录的POST请求做拦截校验
还有两大重要接口:
1.UserDetailsService接口——查询数据库用户名和密码过程,创建其实现类编写数据库查询过程会返回由框架提供的user对象
2.PasswordEncoder——数据加密接口,对返回的user对象的密码进行加密,上面入门案例已经使用过了
之前介绍了基于内存的认证,现在演示基于数据库的认证:
以上的授权都是web授权,我们也可以利用方法注解授权,这样更加灵活。
用于权限控制的注解有:
1.@Secured——执行方法前验证角色
2.@PreAuthorize——执行方法前验证权限
3.@PostAuthorize——执行后返回前验证权限
4.@PostFilter——对返回值过滤
5.@PreFilter——对入参过滤,和PostFilter差别不大,这里不做演示。
之前已经演示了如何使用记住我功能,就是利用cookie存value,自动保存14天,然而只是基于内存的记住我,并没有持久化到数据库,服务器重启后会消失。
持久化token到数据库原理:
现在来演示如何自定义记住我功能,并持久化到数据库:
CSRF跨站请求伪造:
CSRF是一种挟制用户在当前已登录的Web应用上执行非本意的操作的攻击方法,也就是利用技术手段欺骗用户去已认证过的网站进行一些违规操作,类似于信陵君窃符救赵故事。
security默认开启了CSRF保护,主要针对增删改之类操作,可以查看源码:
以下是开关csrf防护的效果演示: