接上: 总结逻辑(单点登录由来)
传统单体架构方式的会话是如何实现的Cookie session
传统单体架构方式的登录在分布式架构中有什么缺陷(Cookie的跨域 session的共享
分布式架构中的认证方式如何实现
1. (session数据持久化 Redis)
2. 认证服务器创建令牌, 客户端存储令牌(服务端进行解析)
认证服务器的作用:
专门用来判断用户的合法性(创建并相应令牌,设置认证机制, 登录成功,失败,没有认证)
认证服务器基于什么规范进行创建
JWT-JSON web Token
资源服务器要做什么(解析令牌, 存储用户认证和权限信息, 提供有条件的资源访问)
Bug分析
400 参数异常401 403
---------------------- resource 资源服务器
token的制作或者解析时候出现错误
检查JwtUtils类 查看方法有无错误, 两个utils
如果拦截器没放行 返回true 返回的就是
------------------------------创建公共工程(抽取共性)----------------
创建sso-common工程
util包拉过来, 删除多余util包
common工程的三个依赖
引用common依赖
---> 在auth包中添加依赖(common依赖)
---> 在resource中添加依赖(common依赖)
<dependencies> <dependency> <groupId>com.cy.jt</groupId> <artifactId>sso-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
服务端过滤器层面的跨域请求的解决办法
当访问认证和资源服务器时,假如是前后端分离项目,需要进行跨域访问
跨域配置代码如下--->
package sso.config; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; @Configuration public class CorsFilterConfig { /** * 服务器服务端过滤器层面设计 * @return */ @Bean public FilterRegistrationBean<CorsFilter> filterFilterRegistrationBean(){ //1.对此过滤器进行配置(跨域设置-url,method) UrlBasedCorsConfigurationSource configSource=new UrlBasedCorsConfigurationSource(); CorsConfiguration config=new CorsConfiguration(); config.addAllowedHeader("*");//所有请求头信息 config.addAllowedMethod("*");//post,delete,get,put,.... config.addAllowedOrigin("*");//所有请求参数 config.setAllowCredentials(true);//所有认证信息,cookie //2.注册过滤器并设置其优先级 这种请求的路径全部放行 configSource.registerCorsConfiguration("/**", config); FilterRegistrationBean<CorsFilter> fBean= new FilterRegistrationBean(new CorsFilter(configSource)); fBean.setOrder(Ordered.HIGHEST_PRECEDENCE);//设置优先级 return fBean; } }
-------->测试: 登录 访问增查,查看权限信息
当你已经点击退出登录logout时候
removeItem直接删除token