java-sso

本文探讨了SSO中客户端和服务端的角色定义,并记录了在实际应用中遇到的问题及解决方法。同时,介绍了如何安装配置MongoDB并创建数据库,以及在项目中进行表创建的过程。此外,还分享了关于Spring Boot版本调整的经验。

妈的,气死,卧槽,他妈好多东西都不懂。老师是个什么几把玩意。
本来java的语法也学得像狗屎一样。

问题

1、sso里面到底客户端,服务端具体指谁啊?看描述怎么几把都对不上。

https://www.cnblogs.com/Worssmagee1002/p/7381680.html
2、使用mongdb要打开docker,docker与VM不兼容,因此把VMbox卸载了,吐了
3、mongodb:数据库的创建
https://www.runoob.com/docker/docker-install-mongodb.html

查看我在项目里面建的表
在这里插入图片描述

代码调试

参考代码
https://blog.youkuaiyun.com/qq_40885085/article/details/106894418

其版本号从2.0.1改成2.3.0或者1.5.6都不会报错了

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<!-- spring boot版本可根据需要修改 -->
		<version>2.3.0.RELEASE</version>  //将其版本号从2.0.1改成2.3.0或者1.5.6都不会报错了
	</parent>
### Java 实现 SSO(单点登录)功能的原理与示例代码 #### 1. 单点登录(SSO)的基本概念 单点登录(Single Sign-On,简称SSO)是一种用户认证机制,允许用户在一次登录后访问多个相互信任的应用系统[^1]。其核心思想是通过一个集中式的认证服务来管理用户的登录状态,并将该状态同步到所有相关系统中。 #### 2. SSO 的工作原理 SSO 的实现通常依赖于以下关键技术: - **Cookie 和 Session 管理**:用户登录成功后,认证服务器会生成一个唯一的会话标识符(如 JSESSIONID),并通过 Cookie 将其发送给客户端。 - **跨域认证**:当用户访问其他应用时,这些应用会通过认证中心验证用户的身份。 - **令牌机制**:现代 SSO 实现常使用 JWT(JSON Web Token)或 OAuth2 来传递用户认证信息。 以下是基于 Spring Security 和 JWT 的 SSO 实现方案[^2]。 #### 3. 示例代码:基于 Spring Security 和 JWT 的 SSO 实现 ##### 3.1 引入依赖 首先,在 `pom.xml` 文件中添加必要的依赖项: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> </dependencies> ``` ##### 3.2 创建认证中心 认证中心负责处理用户的登录请求,并生成 JWT 令牌。 ```java import io.jsonwebtoken.Jwts; import org.springframework.web.bind.annotation.*; @RestController public class AuthController { private static final String SECRET_KEY = "secret"; @PostMapping("/login") public String login(@RequestBody Map<String, String> credentials) { String username = credentials.get("username"); String password = credentials.get("password"); // 验证用户名和密码(此处仅为示例) if ("user".equals(username) && "password".equals(password)) { String token = Jwts.builder() .setSubject(username) .signWith(io.jsonwebtoken.SignatureAlgorithm.HS256, SECRET_KEY) .compact(); return token; } return "Unauthorized"; } } ``` ##### 3.3 配置应用系统的 SSO 验证 每个应用系统需要配置拦截器,用于验证用户是否已登录。 ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class JwtFilter extends OncePerRequestFilter { private static final String SECRET_KEY = "secret"; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { String authHeader = request.getHeader("Authorization"); if (authHeader != null && authHeader.startsWith("Bearer ")) { String token = authHeader.substring(7); try { Claims claims = Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token) .getBody(); request.setAttribute("username", claims.getSubject()); } catch (Exception e) { response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid token"); return; } } chain.doFilter(request, response); } } ``` ##### 3.4 配置 Spring Security 在 Spring Security 中启用过滤器以保护资源。 ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.csrf().disable() .addFilterBefore(new JwtFilter(), UsernamePasswordAuthenticationFilter.class) .authorizeRequests() .antMatchers("/login").permitAll() .anyRequest().authenticated(); return http.build(); } } ``` #### 4. 总结 上述示例展示了如何使用 Spring Security 和 JWT 在 Java 中实现 SSO 功能。通过集中化的认证中心和统一的令牌管理,可以有效简化多系统间的认证流程,同时提升用户体验和系统安全性[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值