核心笔记-长篇

一、验证授权 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-securityspring-cloud-starter-oauth2 依赖,所有需要授权服务都需要。编写配置类:继承 WebSecurityConfigurerAdapter 类;添加 @EnableWebSecurity 俩注解;重写 configure(HttpSecurity http) 实现拦截放行路径;注入对象 BCr
  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄天灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值