ruoyi域名跳转缓存冲突问题(解决办法修改:session名修改session的JSESSIONID名称)






  • 【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】

  • 【创作不易,点个赞就是对我最大的支持】


前言




仅作为学习笔记,供大家参考

总结的不错的话,记得点赞收藏关注哦!




一、问题描述



1、网站通过ip跳转无任何问题,本以为通过域名访问传输有问题。


2、最后排查到域名之间缓存冲突,取不到存进去的值



(一)为什么会存在缓存冲突问题呢?



1、因为域名命名问题,该网站是通过一个官网中的链接跳转至网站。

2、网站域名是该官网的子域名,例如:官网为csdn.cn 网站为:gw.csdn.cn

3、在浏览器看来是一个网站,在用户看来实际是两个不同的网站

4、浏览器是通过域名看做了一个网站,所以通过ip的方式直接访问浏览器是不会看做一个的,但通过官网进入网站则会存在问题,因为都是域名的方式访问

5、访问官网时已经自动生成了session,继续通过官网跳转则会将网站的信息存到官网中的session,网站是不可能取到之前存进去的session。


二、解决方法




1.如图:可以看到两个JSESSIONID名称是一样的

在这里插入图片描述


2.在底层封装的代码中可以看到默认为JSESSIONID

在这里插入图片描述



3.定义JSESSIONID名称

 //在ShiroConfig的sessionManager会话管理器方法中
 //增加一行定义JSESSIONID名称的代码 
  manager.setSessionIdCookie(new SimpleCookie("NEWJSESSIONID"));
 

创作不易,点个赞就是对我最大的支持~


gzh:程序员温眉

优快云:程序员温眉

每天进步一点点的程序员

<think>好的,我现在需要帮助用户了解如何在RuoYi-Vue项目中配置SSO单点登录。首先,我要回忆一下RuoYi-Vue项目的基本架构和技术栈。根据用户提供的引用内容,RuoYi-Vue-Pro是基于Spring Boot、MyBatis Plus和Vue & Element的后台管理系统,支持多种功能,包括单点登录(SSO)。所以,我需要围绕这些技术来思考如何配置SSO。 首先,用户提到的SSO单点登录通常涉及多个系统之间的认证共享。常见的SSO协议有OAuth2、CAS、SAML等。考虑到RuoYi-Vue-Pro可能采用的是Spring Security,而Spring Security对OAuth2有很好的支持,因此推测配置OAuth2的可能性较大。不过,用户之前的引用中提到了“单点登录”作为模块之一,可能系统本身已经有集成的方案,可能需要参考官方文档或社区资源。 接下来,我需要检查用户提供的引用内容是否有相关线索。引用[1]中提到了“单点登录”作为模块之一,引用[3]说明RuoYi-Vue-Pro支持RBAC动态权限、数据权限等,可能SSO集成在其中。引用[2]是eladmin项目的GitHub链接,可能和RuoYi-Vue不同,但可以作为参考。 用户的问题具体是在RuoYi-Vue项目中配置SSO,可能需要分步骤说明。首先,可能需要添加依赖,比如Spring Security OAuth2或者相关的starter。然后,配置授权服务器和资源服务器,设置客户端信息,处理前端Vue部分的跳转和令牌管理。此外,可能需要修改配置文件,比如application.yml,设置安全相关参数,如client-id、client-secret、授权端点等。 需要注意的是,RuoYi-Vue-Pro可能有自己的实现方式,可能需要查阅官方文档或社区教程。如果官方提供了SSO的模块或示例代码,按照文档配置会更直接。例如,在代码生成部分可能有相关配置,或者开发平台中已经包含SSO的设置选项。 另外,用户可能需要配置统一的认证中心,处理各个子系统的登录请求。例如,建立一个授权服务器,其他服务作为资源服务器,通过验证令牌来实现单点登录。在Spring Boot中,可以使用@EnableAuthorizationServer和@EnableResourceServer注解来启用相关功能。 同时,前端Vue部分需要调整登录逻辑,将认证请求重定向到SSO的登录页面,并在回调中处理令牌的获取和存储。可能需要使用vue-router和axios拦截器来处理认证状态。 还要考虑会话管理和令牌的存储,比如使用Redis来共享会话信息,确保不同服务之间能够识别用户的登录状态。引用[1]中提到Redis分布式高速缓存,所以项目可能已经集成了Redis,可以用于存储令牌或会话数据。 可能遇到的常见问题包括跨域配置、令牌的有效期管理、权限的动态获取等。需要确保各个子系统的安全配置正确,尤其是CORS和CSRF的设置。此外,OAuth2中的各种授权模式(如授权码模式)需要正确配置,确保安全性。 总结一下,配置SSO的大致步骤可能包括:添加依赖、配置授权服务器、资源服务器、前端调整、会话管理以及测试验证。需要结合RuoYi-Vue-Pro的具体实现来调整步骤,参考官方文档或社区资源,确保配置正确。</think>在RuoYi-Vue-Pro中配置SSO单点登录需要结合Spring Security OAuth2协议实现,以下是具体步骤: --- ### 一、后端配置(Spring Boot部分) 1. **添加Maven依赖** ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-jose</artifactId> </dependency> ``` 2. **配置application.yml** ```yaml spring: security: oauth2: client: registration: sso-provider: # SSO服务商标识(如keycloak/cas) client-id: your-client-id client-secret: your-client-secret authorization-grant-type: authorization_code redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}" provider: sso-provider: authorization-uri: http://sso-server/oauth/authorize token-uri: http://sso-server/oauth/token user-info-uri: http://sso-server/userinfo ``` 3. **配置SecurityConfig类** ```java @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/oauth2/**").permitAll() .anyRequest().authenticated() .and() .oauth2Login() .userInfoEndpoint() .userService(customOAuth2UserService); } } ``` --- ### 二、前端配置(Vue部分) 1. **安装axios拦截器** ```javascript // src/utils/request.js axios.interceptors.response.use(response => { if (response.data.code === 401) { window.location.href = 'http://sso-server/login?redirect=' + encodeURIComponent(window.location.href) } return response }) ``` 2. **添加SSO登录按钮** ```vue <!-- src/views/login.vue --> <el-button @click="handleSSOLogin">SSO登录</el-button> ``` 3. **处理回调逻辑** ```javascript methods: { handleSSOLogin() { window.location.href = 'http://sso-server/oauth/authorize?response_type=code&client_id=your-client-id&redirect_uri=' + encodeURIComponent(window.location.origin + '/auth/callback') } } ``` --- ### 三、Redis会话共享(分布式环境) 1. **配置Spring Session** ```yaml spring: session: store-type: redis timeout: 3600 redis: host: 127.0.0.1 port: 6379 ``` 2. **添加依赖** ```xml <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> ``` --- ### 四、验证配置 1. 访问 `http://your-app/login` 应重定向至SSO登录页 2. 登录成功后通过Cookie `JSESSIONID` 实现跨子系统免登录 3. 检查Redis中是否存在用户会话数据:`keys spring:session:*` --- ### 常见问题排查 1. **跨域问题**:确保SSO服务端配置CORS白单 ```java @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.addAllowedOrigin("*"); source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } ``` 2. **权限同步问题**:通过OAuth2UserService实现RBAC权限映射[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值