用户认证通过后,为了避免用户的每次操作都进行认证可将用户的信息保证在会话中,会话就是系统为了解决认证之后,在进行常规操作是防止再次认证。常见方式有session ,token
用户认证成功后,在服务端生成用户相关的数据保存在session中,发送给客户端的session_id存放到cookie中,这样用户客户端请求时带上session_id就可以验证服务端是否存在session数据,已完成用户的合法校验,
用户认证成功后,服务端生成token,客户端可以放到cookie或者localStorage等存储中,每次请求带上token
两者区别:session只能放到cookie中,并且服务端要存储tsession,token可以存到客户端自定义的地方,并且不要求服务端进行存储,通过算法校验
作用:认证通过后,校验用户是否有权限进行访问资源或者功能,拥有权限它允许访问,没有权限不能访问,授权可以可以简单一理解为 who对what进行how操作,包括如下:
通过指定角色分配权限
如何实现授权,业界通常基于RBAC完成授权
比如总经理级角色可以进行查询公司
比如用户必须具有查询工资的权限才能查询员工工资信息
优点:系统设计是定义好工资权限标识,即使查询工资所需要的角色变化为总经理和部门经理也不需要修改授权代码,系统可扩展性强
本质是一个过滤链
项目已启动加载过滤器
FilterSecurityInterceptor 方法级别的过滤器
ExceptionTranslationFilter 异常过滤器,用于处理认证授权过程中抛出的异常
UsernamePasswordAuthenticationFilter 用户密码过滤器
如何加载过滤器?
DelegatingFilterProxy
当什么也没配置的时候,security 自动生成账户密码, 而实际项目中账户和密码都是从数据库中查询出来的。所以我们要通过自定义逻辑控制认证逻辑。
如果需要自定义逻辑时,需要两步:
PasswordEncoder 对密码进行加密
BcryptPasswordEncoder 是安全框架官方推荐的密码解析器
1.配置文件设置
2. 配置类设置
3.自定义编写实现类
实现实现UserDetailsService接口