前端部分
==================================================================================================================
修改src/permission.js文件
//需要设置令牌
import { getToken, setToken } from '@/utils/auth'
//获取令牌参数
const token = to.query.token
if (token) {
//前端存储令牌
store.commit('user/SET_TOKEN', token)
setToken(token)
//避免显示令牌
next(to.path)
}
//跳转后端登录
window.location.href = process.env.VUE_APP_BASE_API + '/user/login?redirect=' + encodeURIComponent(window.location.href)
修改src/utils/request.js文件
//修改令牌参数
config.headers['X-Auth-Token'] = getToken()
修改vue.config.js文件
//代理后端服务
target: `http://localhost:8080`,
修改src/layout/components/Navbar.vue文件
//跳转登出地址
window.location.href = process.env.VUE_APP_BASE_API + '/user/logout?redirect=' + encodeURIComponent(window.location.href)
后端部分
==================================================================================================================
修改pom.xml文件
//引入Spring-Session依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
//引入Cas-Client依赖
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>3.5.1</version>
</dependency>
修改application.properties文件
//配置Spring-Session参数
spring.session.store-type=redis
spring.redis.host=192.168.99.230
spring.redis.password=bessky123
spring.redis.port=6379
spring.redis.database=15
修改Application.java文件
//启用Spring-Session的REST模式
@Bean
public HttpSessionIdResolver httpSessionIdResolver()
{
return HeaderHttpSessionIdResolver.xAuthToken();
}
//单点登录配置
@Bean
public FilterRegistrationBean<Cas30ProxyReceivingTicketValidationFilter> cas30ProxyReceivingTicketValidationFilter()
{
FilterRegistrationBean<Cas30ProxyReceivingTicketValidationFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new Cas30ProxyReceivingTicketValidationFilter());
registration.addInitParameter("casServerUrlPrefix", "https://erp.ser.ltd/sso");
registration.addInitParameter("serverName", "http://localhost:8080");
registration.addInitParameter("redirectAfterValidation", "false");
registration.addUrlPatterns("/*");
return registration;
}
@Bean
public FilterRegistrationBean<AuthenticationFilter> authenticationFilter()
{
FilterRegistrationBean<AuthenticationFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new AuthenticationFilter());
registration.addInitParameter("casServerUrlPrefix", "https://erp.ser.ltd/sso");
registration.addInitParameter("serverName", "http://localhost:8080");
registration.addUrlPatterns("/*");
return registration;
}
@Bean
public FilterRegistrationBean<HttpServletRequestWrapperFilter> httpServletRequestWrapperFilter()
{
FilterRegistrationBean<HttpServletRequestWrapperFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new HttpServletRequestWrapperFilter());
registration.addUrlPatterns("/*");
return registration;
}
增加UserController.java文件
//模拟前端数据
@RestController
@RequestMapping("user")
public class UserController
{
@RequestMapping("login")
public void login(String redirect, HttpServletResponse response, HttpSession session) throws IOException
{
response.sendRedirect(redirect + "?token=" + session.getId());
}
@RequestMapping("logout")
public String logout(String redirect, HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException
{
session.invalidate();
if (redirect != null && !"".equals(redirect))
{
// 获取单点登出地址
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
if (principal != null)
{
Map<String, Object> attributes = principal.getAttributes();
if (attributes != null)
{
String logoutUrl = (String) attributes.get("logout_url");
if (logoutUrl != null && !"".equals(logoutUrl))
{
// 重定向到单点登录退出
logoutUrl = logoutUrl + "?service=" + redirect;
response.sendRedirect(logoutUrl);
}
}
}
}
return "{\"code\":20000,\"data\":\"success\"}";
}
@RequestMapping("info")
public String info(HttpSession session)
{
System.out.println(session.getId());
return "{\"code\":20000,\"data\":{\"roles\":[\"admin\"],\"introduction\":\"I am a super administrator\",\"avatar\":\"https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif\",\"name\":\"Super Admin\"}}";
}
}
分享到:
相关推荐
Vue+SpringBoot前后端分离实现单点登录跨域问题解决方法 单点登录概述 单点登录(Single Sign-On,SSO)是指用户只需登录一次,即可访问所有相关的应用系统,而不需要在每个系统中重复登录。这种机制可以提高用户...
在这个场景下,我们讨论的是“前后端未分离”的单点登录实现,这通常意味着前端和后端代码在同一项目中,没有采用现代的前后端分离架构。 1. **单点登录原理**: SSO的核心思想是通过一个中心认证服务(Central ...
《基于SpringBoot+Vue的前后端分离仓储管理系统设计与实现》 ...通过以上关键技术的综合运用,"基于SpringBoot+Vue的前后端分离仓储管理系统"得以实现,为企业提供了一套高效、易用的仓储管理解决方案。
SSO单点登录解决方案 SSO(Single Sign-On)单点登录解决方案旨在提供一个统一的身份验证入口,满足集团多个成员网站的身份验证需求。该方案的主要目标是实现单点登录,提高用户体验,降低成员网站的登录负载,并...
在近期的一次项目开发中,我们遇到了一个棘手的问题,那就是如何在 Vue 和 Spring Boot 的前后端分离架构中实现单点登录(SSO)。单点登录是指用户只需要登录一次,就可以访问到不同的应用系统,而不需要在每个系统...
本项目"SpringBoot+Vue前后端分离外卖点单系统"提供了一个完整的、经过测试的解决方案,非常适合本科毕业设计或实际项目开发。下面,我们将深入探讨这一系统的组成部分和实现原理。 1. **SpringBoot**:SpringBoot...
该项目是一个使用Java技术栈开发的前后端分离的学校排课系统,其中采用了遗传算法来优化课程安排。在本文中,我们将深入探讨这个系统的几个关键知识点。 1. **前后端分离**: 前后端分离是现代Web开发中的一个重要...
《构建基于SpringBoot + Vue的前后端分离外卖点单系统》 在当今互联网时代,外卖点单系统已经成为人们生活中不可或缺的一部分。本项目采用先进的技术栈——SpringBoot后端框架与Vue.js前端框架,实现了功能完善的...
"基于SpringCloud与Vue前后端分离,分布式架构的在线测评平台OJ",这个标题揭示了该在线测评平台的核心技术栈。SpringCloud是微服务框架,用于构建分布式系统,Vue则是一个前端JavaScript框架,实现用户界面的交互。...
### 单点登录SSO解决方案之SpringSecurity+JWT实现 #### 一、单点登录(SSO)概述 单点登录(Single Sign-On,简称SSO)是一种认证机制,允许用户仅通过一次登录就能访问同一域下的多个应用程序和服务。这种机制...
通过这些知识点的学习和实践,你可以创建一个基本的SSO单点登录DEMO,为多应用环境提供便捷的身份验证方案。在实际项目中,你可能还需要根据具体需求进行扩展,比如支持OAuth、OpenID Connect等更现代的认证协议,...
本文将对前后端分离系统架构进行概述,介绍前后端分离的发展历程、 MVC 框架、前后端分离的优点和缺点、以及前后端分离的未来发展方向。 1. 背景 前后端分离系统架构已经成为互联网项目开发的业界标准使用方式。...
在IT行业中,单点登录(Single Sign-On, SSO)是一种常见的身份验证机制,它允许用户在一个系统上登录后,无需再次验证即可访问其他多个相互信任的系统。本压缩包"集成cas实现单点登录认证.zip"显然包含了关于如何...
在现代Web开发中,前后端分离已成为主流架构模式,它允许前端和后端开发人员可以独立进行开发工作,前端专注于展示和用户交互,后端则负责业务逻辑和数据处理。这种架构模式的一个重要功能就是文件上传,它在很多...
【标题】: "Java后端开发实践:前后端分离架构详解" 在软件开发领域,前后端分离已经成为现代Web应用的标准设计模式。这个项目是基于Java技术栈实现的后端部分,旨在提供一个清晰、高效的解决方案,使前端和后端...
基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba...模块包括:企业级的认证系统、开发平台、应用监控、慢sql监控、统一日志、单点登录、Redis分布式高速缓存、配置中心、分布式任务调度、接口文档、代码生成等等。
基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba...模块包括:企业级的认证系统、开发平台、应用监控、慢sql监控、统一日志、单点登录、Redis分布式高速缓存、配置中心、分布式任务调度、接口文档、代码生成等等。