`
liunancun
  • 浏览: 33985 次
社区版块
存档分类
最新评论

前后端分离单点登录方案

 
阅读更多
前端部分
==================================================================================================================
修改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前后端分离实现单点登录跨域问题解决方法

    Vue+SpringBoot前后端分离实现单点登录跨域问题解决方法 单点登录概述 单点登录(Single Sign-On,SSO)是指用户只需登录一次,即可访问所有相关的应用系统,而不需要在每个系统中重复登录。这种机制可以提高用户...

    前后端未分离的单点登录

    在这个场景下,我们讨论的是“前后端未分离”的单点登录实现,这通常意味着前端和后端代码在同一项目中,没有采用现代的前后端分离架构。 1. **单点登录原理**: SSO的核心思想是通过一个中心认证服务(Central ...

    基于SpringBoot+Vue的前后端分离仓储管理系统设计与实现

    《基于SpringBoot+Vue的前后端分离仓储管理系统设计与实现》 ...通过以上关键技术的综合运用,"基于SpringBoot+Vue的前后端分离仓储管理系统"得以实现,为企业提供了一套高效、易用的仓储管理解决方案。

    SSO单点登陆解决方案

    SSO单点登录解决方案 SSO(Single Sign-On)单点登录解决方案旨在提供一个统一的身份验证入口,满足集团多个成员网站的身份验证需求。该方案的主要目标是实现单点登录,提高用户体验,降低成员网站的登录负载,并...

    vue+springboot前后端分离实现单点登录跨域问题处理.doc

    在近期的一次项目开发中,我们遇到了一个棘手的问题,那就是如何在 Vue 和 Spring Boot 的前后端分离架构中实现单点登录(SSO)。单点登录是指用户只需要登录一次,就可以访问到不同的应用系统,而不需要在每个系统...

    SpringBoot+Vue前后端分离外卖点单系统.zip

    本项目"SpringBoot+Vue前后端分离外卖点单系统"提供了一个完整的、经过测试的解决方案,非常适合本科毕业设计或实际项目开发。下面,我们将深入探讨这一系统的组成部分和实现原理。 1. **SpringBoot**:SpringBoot...

    Java精品项目源码前后端分离项目第17期基于遗传算法学校排课系统.zip

    该项目是一个使用Java技术栈开发的前后端分离的学校排课系统,其中采用了遗传算法来优化课程安排。在本文中,我们将深入探讨这个系统的几个关键知识点。 1. **前后端分离**: 前后端分离是现代Web开发中的一个重要...

    基于SpringBoot + Vue 开发的前后端分离外卖点单系统.zip

    《构建基于SpringBoot + Vue的前后端分离外卖点单系统》 在当今互联网时代,外卖点单系统已经成为人们生活中不可或缺的一部分。本项目采用先进的技术栈——SpringBoot后端框架与Vue.js前端框架,实现了功能完善的...

    基于SpringCloud与Vue前后端分离,分布式架构的在线测评平台OJ

    "基于SpringCloud与Vue前后端分离,分布式架构的在线测评平台OJ",这个标题揭示了该在线测评平台的核心技术栈。SpringCloud是微服务框架,用于构建分布式系统,Vue则是一个前端JavaScript框架,实现用户界面的交互。...

    单点登录SSO解决方案之SpringSecurity+JWT实现.docx

    ### 单点登录SSO解决方案之SpringSecurity+JWT实现 #### 一、单点登录(SSO)概述 单点登录(Single Sign-On,简称SSO)是一种认证机制,允许用户仅通过一次登录就能访问同一域下的多个应用程序和服务。这种机制...

    SSO单点登录DEMO

    通过这些知识点的学习和实践,你可以创建一个基本的SSO单点登录DEMO,为多应用环境提供便捷的身份验证方案。在实际项目中,你可能还需要根据具体需求进行扩展,比如支持OAuth、OpenID Connect等更现代的认证协议,...

    前后端分离系统架构概述.docx

    本文将对前后端分离系统架构进行概述,介绍前后端分离的发展历程、 MVC 框架、前后端分离的优点和缺点、以及前后端分离的未来发展方向。 1. 背景 前后端分离系统架构已经成为互联网项目开发的业界标准使用方式。...

    集成cas实现单点登录认证.zip

    在IT行业中,单点登录(Single Sign-On, SSO)是一种常见的身份验证机制,它允许用户在一个系统上登录后,无需再次验证即可访问其他多个相互信任的系统。本压缩包"集成cas实现单点登录认证.zip"显然包含了关于如何...

    SpringBoot+Vue.js实现前后端分离的文件上传功能

    在现代Web开发中,前后端分离已成为主流架构模式,它允许前端和后端开发人员可以独立进行开发工作,前端专注于展示和用户交互,后端则负责业务逻辑和数据处理。这种架构模式的一个重要功能就是文件上传,它在很多...

    这是一个前后端分离的项目,此部分为后端Java代码

    【标题】: "Java后端开发实践:前后端分离架构详解" 在软件开发领域,前后端分离已经成为现代Web应用的标准设计模式。这个项目是基于Java技术栈实现的后端部分,旨在提供一个清晰、高效的解决方案,使前端和后端...

    基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba采用前后端分离企业级微服务多租户系统

    基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba...模块包括:企业级的认证系统、开发平台、应用监控、慢sql监控、统一日志、单点登录、Redis分布式高速缓存、配置中心、分布式任务调度、接口文档、代码生成等等。

    基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离的企业级微服务多租户

    基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba...模块包括:企业级的认证系统、开发平台、应用监控、慢sql监控、统一日志、单点登录、Redis分布式高速缓存、配置中心、分布式任务调度、接口文档、代码生成等等。

Global site tag (gtag.js) - Google Analytics