SpringBoot前背景分离项目利用Redis实现SSO单点登录

[复制链接]
发表于 2025-12-5 16:45:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
SpringBoot前背景分离项目利用Redis实现SSO单点登录

接纳web集群举行的服务设置,可以得到较好的处理惩罚性能,同时也可以包管高可用的机制,但是有一个最关键性的标题就是在于Session共享与分配,从早期的开发来讲,Session共享是在tomcat中设置的(Tomcat提供了一个扩展的支持)。
一、单点登录(SSO)

1、单点登录(SSO)是什么

单点登录(SSO,Single Sign On),是在企业内部多个应用体系(如考勤体系、财政体系、人事体系等)场景下,用户只须要登录一次,就可以访问多个应用体系。
同理用户只需注销一次,就可以从多个应用体系退出登录。
简单来说就是,一次登录,全部登录!一次注销,全部注销!!
2、单点登录的实现原理

单点登录的实现原理阐明如下:
      
  • 用户初次访问体系A时,须要举行登录。  
  • 体系A带着用户登录信息重定向给认证体系。  
  • 认证体系验证用户登录信息。  
  • 验证通过后,返回一个token(Tip:token类似一种内部的通行证,包罗了用户身份信息、登录状态和逾期时间,在各个体系间共享。)  
  • 认证体系带着token重定向给体系A,得知用户是已登录状态。  
  • 体系A向用户返回哀求的资源。  
  • 用户访问体系B时,须要举行登录。  
  • 体系B通过共享的token,得知用户是已登录状态。  
  • 体系B向用户返回哀求的资源。
Token是偶然效性的,假如用户长时间没有操纵,token将会逾期。
Token逾期后用户再次访问体系A、体系B时,登录状态已失效,须要重新登录。
对于注销场景,与上述流程类似。
用户自动从体系A注销时,体系A调用认证体系,打扫token。
此时用户再访问体系A、体系B时,通过共享的token得知用户是已注销状态,须要重新登录。
二、Springboot的拦截器和过滤器的区别

Spring Boot中的拦截器(Interceptor)和过滤器(Filter)是用来在哀求处理惩罚之前或之后举行一些特别处理惩罚的工具。它们的告急区别如下:

      
  • 实现机制差别:Filter 是基于 Servlet 规范实现的,而 Interceptor 是基于 Spring MVC 框架实现的。
      
  • 拦截范围差别:Filter 可以拦截全部的哀求,而 Interceptor 只能拦截由 DispatcherServlet 处理惩罚的哀求。
      
  • 拦截次序差别:Filter 在 Interceptor 之前调用,而且在全部的拦截器(Interceptor)之后调用。
      
  • 拦截方法差别:Filter 实现了 javax.servlet.Filter 接口,此中有两个告急方法:init() 和 destroy()。Interceptor 实现了 Spring 的 HandlerInterceptor 接口,此中有三个告急方法:preHandle()、postHandle() 和afterCompletion()。

过滤器示例代码:
  1. import javax.servlet.*;
  2. import javax.servlet.http.HttpServletRequest;
  3. import java.io.IOException;
  4. public class MyFilter implements Filter {
  5.    
  6.    
  7.     @Override
  8.     public void init(FilterConfig filterConfig) throws ServletException {
  9.    
  10.    
  11.         // 初始化代码
  12.     }
  13.     @Override
  14.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  15.    
  16.    
  17.         HttpServletRequest req = (HttpServletRequest) request;
  18.         // 在请求处理之前可以进行一些处理
  19.         System.out.println("Filter before processing the request: " + req.getRequestURI());
  20.         chain.doFilter(request, response); // 传递给下一个过滤器或servlet处理
  21.         // 在请求处理之后可以进行一些处理
  22.         System.out.println("Filter after processing the request: " + req.getRequestURI());
  23.     }
  24.     @Override
  25.     public void destroy() {
  26.    
  27.    
  28.         // 销毁代码
  29.     }
  30. }
复制代码
注册过滤器
注册过滤器,可以利用@WebFilter注解大概在设置类中用@Bean注解注册。
  1. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. @Configuration
  5. public class FilterConfig {
  6.    
  7.    
  8.     @Bean
  9.     public FilterRegistrationBean<MyFilter> myFilter() {
  10.    
  11.    
  12.         FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>();
  13.         registrationBean.setFilter(new MyFilter());
  14.         registrationBean.addUrlPatterns("/*");
  15.         registrationBean.setOrder(1);
  16.         return registrationBean;
  17.     }
  18. }
复制代码
三、SpringBoot利用redis实现单点登录

在Spring Boot中利用拦截器来用户是否登录:
1、登录状态可以生存在redis中
2、创建一个自界说拦截器,在此中查抄哀求中的登录根据是否有效。
以下是一个简单的示例:
创建名称为sso-demo的springboot项目
1、pom.xml依靠设置

  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6.     <groupId>org.springframework.boot</groupId>
  7.     <artifactId>spring-boot-starter-test</artifactId>
  8.     <scope>test</scope>
  9. </dependency>
  10. <dependency>
  11.     <groupId>org.springframework.boot</groupId>
  12.     <artifactId>spring-boot-starter-data-redis</artifactId>
  13. </dependency>
  14. <dependency>
  15.     <groupId>org.projectlombok</groupId>
  16.     <artifactId>lombok</artifactId>
  17.     <version>1.18.22</version> <!-- 请使用最新的版本号 -->
  18. </depende
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表