Spring-Security登录授权流程
文字版流程
流程(文字版)
-1 在acl模块新建UserDetailService类(实现ss的UserDeTAILService接口),重写校验密码和查询权限的方法
0 创建SpringSecurity配置类,修改相关的参数
1 浏览器------>服务器后台(表单提交用户名和密码,UserdetailService类的方法查询数据库进行校验),校验成功,根据用户名查询出权限列表
2.1 后台---->redis 存放用户名(username)(key) 权限列表 (value)
2.1后台---->浏览器 返回token(根据用户id),存储在cookie里面,每次调用时将token设置咋iheader里面
3security从header中获取token信息,获取用户名(username)
4 根据username从redis里面取值(权限列表)
5 由ss给用户赋予权限 (在service-acl里面引入security模块的依赖)
那么根据上述的文字信息描述,再对照谷粒学院的相关代码,就可以理解每一步的配置的作用
分割线
##############################
对应步骤-1,在数据库查询用户名密码和权限列表
在这里插入代码片@Service("userDetailsService")
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserService userService;
@Autowired
private PermissionService permissionService;
/***
* 根据账号获取用户信息
* @param username:
* @return: org.springframework.security.core.userdetails.UserDetails
*/
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 从数据库中取出用户信息
User user = userService.selectByUsername(username);
// 判断用户是否存在
if (null == user){
//throw new UsernameNotFoundException("用户名不存在!");
}
// 返回UserDetails实现类
com.shalong.serurity.entity.User curUser = new com.shalong.serurity.entity.User();
BeanUtils.copyProperties(user,curUser);
List<String> authorities = permissionService.select