11.spring security 认证和授权简单流程了解
1.总结:昨天主要是对WebSecurityConfigurerAdaptor的三个函数的区分以及了解了spring security的认证和授权流程;再就是动手使用了下thymeleaf和freeMark的模板以及使用JSON和fastJSON进行了JSON序列化显示图书信息
- WebSecurityConfigurerAdaptor的AuthenticationManagerBuilder主要是配置全局认证信息即AuthenticationManager(一般都是 通过DaoAuthenticationManagerProvider来实现)认证服务提供者和UserDetailsService来查询用户信息
- WebSecurity主要是全局请求忽略配置
- HttpSecurity主要是具体权限控制配置即授权哪些人访问哪些页面
- spring security的认证流程:首先是AbstractAuthenticationProcessingFilter过滤器将用户账号和密码封装成一个Authentication实现类UsernamePasswordAuthenticationToken;再通过AuthenticationManager的实现类DaoAuthenticationManagerProvider来验证验证用户信息是否有效;如果验证成功AuthenticationManager会议返回一个Authentication的Object里面包含用户的身份、权限、细节信息,但不包含密码;最后通过SecurityContextHolder.getContext().getProcipal()将object存到Security context中
- spring security授权流程:基于角色的访问控制:RBAC;根据用户查询用户所拥有的权限信息,再根据用户的权限信息查询用户拥有的url集合,最后判断用户要访问的url是否在这个url集合中,如果在就可以访问;
- SecurityMetadataSource通过getAttributes方法从数据库或者其他数据源信息获取ConfigAttributes中存取的url;再通过AccessDecisionManager的decide方法投票决定是否授权访问
2.反思:其实很多东西看起来很简单,但是还是要动手敲代码,这样才能发现一些细枝末节的问题,以及对此更加熟练;现在要做的微人力项目是一个模块导入项目,现在大多数项目都是通过一个部分使用一个模块来编写,需要应用的时候,就导入相应模块,若依项目就是这样,实现前后端分离
3.复盘:对之前的cookie实现单点登录的复盘,在登陆那里主要是模拟数据来验证灯枯信息,验证无误后,先将数据存在一个存放数据的工具类里面类似于redis,再将数据以固定字符串为键,token为值存入,响应给浏览器;这是早期单点登录的思想;而在跳转登录方法里面就是首先获取当前登录地址,以及判断cookie是否为空进而获取token,再判断token是否为空进而获取用户信息,存在即返回主页面,不存在返回登录,而在资源类的跳转里面是将存在的用户通过session返回页面显示