SpringSecurity+jwt+captcha登录认证授权总结 版本信息: springboot 3.2.0、springSecurity 6.2.0、mybatis-plus 3.5.5 认证授权思路和流程: 未携带token,访问登录接口: 1、用户登录携带账号密码 2、请求到达自
SpringSecurity+jwt+captcha登录认证授权总结版本信息: springboot 3.2.0、springSecurity 6.2.0、mybatis-plus 3.5.5 认证授权思路和流程: 未携带token,访问登录接口: 1、用户登录携带账号密码 2、请求到达自定义Filter,自定义Filter(如JwtAuthenticationTokenFilter)继承OncePerRequestFilter(此Filter只会进行一次过滤,在请求返回时,不会再进行调用),在SecurityConfig中配置,将自定义Filter添加到过滤器链中并加在UsernamePasswordAuthenticationFilter过滤器之前 3、自定义Filter逻辑 3.1、查询到用户未携带token,直接放行,进入到后面认证流程 3.2、将用户信息封装成Authentication对象,调用authticate()方法进行验证,一直到DaoAuthenticationProvider中,会调用UserDetailService的loadUserByUserName()方法;自定义UserDetailServiceImpl继承UserDetailService接口;重写其loadUserByUserName()方法;查到用户后,封装成UserDetail对象返回 4、调用passwordEncoder的验证方法进行用户信息的认证(一般使用BCryptPasswordEncoder,创建此Bean并放入容器中) 5、认证通过后,使用JWT创建token并放到redis中;返回token到前端 携带token访问: 1、请求到达自定义Filter中,获取token,先验证token的正确性,从token中获取到userId,根据userId从redis中获取用户信息,将用户信息封装成Authentication对象,放进SecurityContextHolder中,后面的过滤器会在SecurityContextHolder中获取用户的信息 2、请求到达FilterSecurityInterceptor,在springSecurity中默认使用FilterSecurityInterceptor来进行权限校验;FilterSecurityInterceptor会从SecurityContextHolder中获取Authentication,然后获取其中的权限信息,判断当前用户是否拥有当前资源的访问权限; 3、通过权限判断,获取资源返回给前端; 登录认证流程图: 基于RBAC的授权控制: RBAC概念: Role-Based Access Control,中文意思是:基于角色(Role)的访问控制。这是一种广泛应用于计算机系统和网络安全领域的访问控制模型。 简单来说,就是通过将权限分配给角色,再将角色分配给用户,来实现对系统资源的访问控制。一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般是多对多的关系 模型: 在数据库中主要体现用户表、角色表、菜单表、用户角色关联表、角色菜单关联表五个模型:
权限流程: 用户表、角色表、菜单表、部门表、用户角色关联表、角色菜单关联表;数据权限分为5种:个人、全部、本部门、指定部门、本部门及以下 1、用户注册,指定部门;创建角色,给角色赋菜单权限、数据权限;给用户赋予角色; captcha图片验证码: 实现思路: 1、图片验证码获取,并将验证码验证码存放起来(单机应用可放在session中,分布式应用放在redis中) 2、当用户登录时,携带验证码以及验证码的key,进入到后端从redis中获取值进行验证
代码思路: 1、生成验证码
2、存储验证码
3、校验验证码
|
2021-06-05
2021-05-27
2021-05-26
2021-06-05
2021-05-16