开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):权限管理-整合 SpringSecurity(2)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11534
权限管理-整合 SpringSecurity(2)
权限管理-整合 SpringSecurity
1、在service_acl 模块中引入 spring _security
来到 service_acl 中,之前的内容都已经复制过了,功能也书写完成,所以现在需要在 service_acl 中引入一个依赖,在 service_acl 中进行权限管理。
<dependency>
<groupId>com.atguigu</groupId>
<artifactIdspring_security</ artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
2、创建查询登录和用户权限类
打开 spring _security,找到 Tokenwebsecurityconfig,有个 uesrdetailsservice,这个 user 的意思是当认证输入登录密码时,需要查询数据库,通过数据库查询密码是否正确。正确之后就会查询登录用户权限列表。
在 service_acl 中,找到 service,
在里面添加了一个 userDetailsServiceImpl 这个类,这个类已经添加好了,位置可以随意添加。
UserDetailsService 必须实现一个接口 UserDetailsService,这个接口是 security 写的,security 会找这个用户用的实现类,查询用户权限,并且判断用户是否成功,这其中涉及到面向接口思想,现在应用的 security 是一种框架,框架在设计的时候就会考虑到更通用,因为每一个程序中的内容都有区别,因此如何让框架更加通用,做法就是在框架本身提供了很多接口。
在应用框架的时候可以灵活的试验接口,然后书写自己的逻辑,当你做查询的时候,没有提供接口如何查询,只需要写个类,然后查询接口,书写逻辑。
书写类的时候,系统提供接口,在其中书写自己的属性,再试验接口也可以做到,面向接口开发,面向 internet 开发,实现接口都会有这种思路,这种思路在学习 java 早期 Dbutils 就应用这种框架,Dbutils 是面向接口开发的一个小框架,其中可以自己分装,但是当时里面的内容就足够我们使用,但是也可以自己分装,更加完善。
现在 security 给我们提供了很多接口,自己书写可以按照逻辑试验接口,在其中自己约定,但是要求是要返回到security 中的 security user,security user 包括数据,security 就通过这个对象查询数据。在整合中只是做到了下述图中的一部分内容,下述图中的大部分内容是由 security 完成的,并不是少了东西,而是由 security 完成了很多内容。
我们只需要进行一些配置,例如查询数据库,将数据放到 redis 中,但是其中如何授权等内容都是由 security 完成的。
流程就是在 common 中建立一个 spring_security 模块,在模块下线引入相关的依赖,引入依赖之后,从 security 的源码中将一些股东的代码复制过来,其中有两个核心的过滤器。
再之后就是在 security_acl 中引入 security 依赖,写一个查询用户名和密码的类,类的位置是随意的,需要实现UserDetailsService 接口,这个接口是由 security 提供的,在里面书写查询逻辑,最后返回 security 对象,完成整合,通过这个过程就能实现登录认证和授权。
过程中也应用到了 redis 数据库,包括向其中写数据和用数据。例如代码 redisTemolate,redisTemplate.opsForValue().set(user.getCurrentUserInfo().getUsername()user.getPermissionValueList());
将你的用户名和密码放置到 redis 中
ResponseUtil.out(res,R.ok() . data("token , token)):
取数据。
所以前提是将 redis 启动,再进行测试。上述过程就是整合代码到 security,在实际应用过程也是如此,将代码复制过来再整合乘自己的需求,因为它是一个固定的整合过程。