springboot 单点登录(详细代码)

本文详细介绍了如何使用SpringBoot构建单点登录系统。通过设置登录系统处理用户登录,利用Cookie传递信息,确保用户在登录后访问关联系统时无需再次登录。文中包括准备工作、登录系统、子系统和测试步骤,提供了具体的配置和代码示例。
摘要由CSDN通过智能技术生成

单点登录,就是在一个系统登录后,在它的关联系统也不用重新登录了。例如:你成功登录了淘宝,那么在天猫也就成功登录了;同理,退出也是一样的。在天猫退出账号,在淘宝的账号也就退出了。(咳咳,同一浏览器内)

实现单点登录,主要就是利用同域名传递 cookie 中的登录用户信息。以下是一种实现方式,仅供参考!

准备工作

1)
系统:win10
IDE:sts4
springboot2.2.4.RELEASE、 jdk8、 maven3.3.9

在本例中,创建了4个 springboot 项目,一个专用来处理登录(login.sso.com),其他都是关联系统,把 sys1.sso.com 当做是主系统。

如果用户首先在 sys1 系统的首页浏览,此时点击登录,则跳转到登录系统处理登录逻辑。登录成功后,会跳转到 sys1 系统的首页,并且是已登录状态。
同理用户在 sys2 系统的首页浏览,此时点击登录,则跳转到登录系统处理登录逻辑。登录成功后,会跳转到 sys2 系统的首页,并且是已登录状态。
那如果一开始就是没有在其他系统浏览,而是直接到登录系统进行登录呢。那这种情况登录成功后,本例会跳转到 sys1 的首页,即设定 sys1 为主系统的意思

2)域名映射
修改 hosts 文件,路径:C:\Windows\System32\drivers\etc
在这里插入图片描述

登录系统

登录系统只有一个登录界面和处理登录信息的逻辑
1)pom 依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

没有使用数据库,用户信息是写死的,所以只需要这两个依赖就够了。

2)登录界面 login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>sso-login</title>
</head>
<body>
	<h3>这里是登录页面</h3>
	<p style="color:red;" th:text="${session.msg}"></p>
	<form action="/login" method="post">
		用户名:<input type="text" name="uname"/><br/>
		密码:<input type="password" name="upwd"/><br/>
		<button 
  • 5
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Spring Boot 单点登录(Single Sign-On,简称 SSO)的实现通常涉及到以下几个关键步骤: 1. **集中认证服务器**:创建一个独立的服务,如使用 Spring Security 的 `CasServer` 或者 OAuth2 的 `/oauth/token` 接口,负责处理用户的登录验证。 ```java @Autowired private AuthenticationManager authenticationManager; @PostMapping("/login") public ResponseEntity<?> authenticate(@RequestBody LoginRequest loginRequest) { try { Authentication authentication = authenticationManager.authenticate(loginRequest); // 将认证信息存入到Token或Cookie return new ResponseEntity<>(authentication, HttpStatus.OK); } catch (AuthenticationException e) { return new ResponseEntity<>(e.getMessage(), HttpStatus.UNAUTHORIZED); } } ``` 2. **客户端应用配置**:每个依赖于单点登录的应用需要配置 Spring Security 或者其他身份验证框架,使其能够从统一的认证服务器获取令牌。这通常涉及配置 `SecurityFilterChain` 或 `WebSecurityConfigurerAdapter`。 3. **JWT 令牌管理**:可以使用 JWT(JSON Web Token)来存储和验证用户的登录状态。Spring Security 提供了集成,如 `@EnableWebSecurity` 和 `JwtAuthenticationEntryPoint`。 4. **过滤器或拦截器**:在客户端应用中设置一个过滤器或拦截器,用于在每个请求到达时检查 JWT 令牌的有效性。如果令牌有效,用户就无需再次登录。 ```java @Component public class JwtFilter extends OncePerRequestFilter { private final UserDetailsService userDetailsService; private final JwtTokenProvider jwtTokenProvider; // 构造函数注入依赖 @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { // 验证JWT String jwt = extractJwtFromHeader(request); if (jwt != null && jwtTokenProvider.validate(jwt)) { SecurityContextHolder.getContext().setAuthentication(authenticationFromJwt(jwt)); } chain.doFilter(request, response); } } ``` 5. **跨域支持**:如果你的应用部署在不同的域下,可能需要添加 CORS 头部以允许跨域访问。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值