接上: 总结逻辑(单点登录由来)
传统单体架构方式的会话是如何实现的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