核心笔记-长篇

发布时间:2024年01月17日

一、验证授权 Spring Security

1、登录实现思路

  1. SecurityConfig 配置类:securityFilterChain(httpSecurity) 中配置拦截和放行的地址并添加授权管理器,并注入 AuthenticationManager(认证管理对象) 和 BCryptPasswordEncoder(随机盐值加密方法对象)
  2. 控制层:接受前端发送的账号密码,调用服务层返回前端需要的内容
  3. 服务层:使用 authenticationManager.authenticate(带有账号密码的 usernamePasswordAuthenticationToken 对象) 得到认证后的对象 authentication
  4. UserDetailsService 实现类:调用 authenticate() 会执行 UserDetailsService 实现类的 loadUserByUsername(username) ,在该方法中通过查询数据库来获取认证后的对象,此对象一般是我们实现 UserDetails 接口自定义的用户对象
  5. 服务层:authentication.getPrincipal() 可以获得我们自定义的用户对象,强转
  6. 服务层:然后就可以构造返回对象,为返回对象赋值,如:Token、角色列表、资源列表等信息

2、访问拦截实现思路

  1. 配置自定义拦截器实现 HandlerInterceptor
  2. preHandle(request,response,handler) 中判断是不是控制层方法,不是直接放行,handler instanceof HandlerMethod
  3. request 对象拿到 Token,进行判断解析
  4. 可以将解析得到的用户对象存放在 ThreadLocal 对象中,要在 afterCompletion(request,response,handler) 中 remove 掉
  5. 让这拦截器生效,在实现 WebMvcConfigurer 的类中配置(类上要添加 @ComponentScan),在 addInterceptors(interceptorRegistry) 中添加 interceptorRegistry.addInterceptor(我们拦截的名字).excludePathPatterns(排除拦截路径的 String 数组).addPathPatterns("/**");
  6. 授权管理器,实现 AuthorizationManager 接口,重写 check 方法
  7. 在授权管理器里面进行用户方法的地址和授权地址进行比较,可以使用 AntPathMatcher 对象的 match 方法进行比较
  8. 没有该路径则 return new AuthorizationDecision(false),有则为 true

3、分布式实现

使用 Spring Security + OAuth2 + JWT 技术

OAuth2 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。应用场景:微信授权登录,外部系统访问本系统资源,前端访问后端。核心: 客户端请求资源拥有者得到其授权;客户端请求微信授权服务器得到令牌;客户端携带令牌请求微信资源服务器得到资源。授权模式:授权码模式:就是微信扫码授权登录,使用令牌的模式;密码模式

  1. 搭建授权服务:添加 spring-cloud-starter-security 和 <
文章来源:https://blog.csdn.net/qq_46023503/article/details/135587594
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。