前后端分离单点登录方案

标签: 后端 分离 单点登录 | 发表时间:2019-09-27 15:42 | 作者:liunancun
出处:https://www.iteye.com
前端部分
==================================================================================================================
修改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 + '/login?redirect=' + encodeURIComponent(window.location.href)

修改src/utils/request.js文件
//修改令牌参数
config.headers['X-Auth-Token'] = getToken()

修改vue.config.js文件
//代理后端服务
target: `http://localhost:8080`,

修改src\store\modules\user.js文件
//增加接收参数
logout(state.token).then((response) => {
//跳转退出地址
if (response.logoutUrl) {
window.location.href = response.logoutUrl + '?service=' + 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;
}

增加SingleSignController.java文件
//前端登录处理
@Controller
public class SingleSignController
{
    @RequestMapping("login")
    public String login(String redirect, HttpSession session)
    {
        return "redirect:" + redirect + "?token=" + session.getId();
    }
}

增加UserController.java文件
//模拟前端数据
@RestController
@RequestMapping("user")
public class UserController
{
    @RequestMapping("logout")
    public String logout(HttpServletRequest request, HttpSession session)
    {
        // 获取单点登出地址
        String logoutUrl = "";
        AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
        if (principal != null)
        {
            Map<String, Object> attributes = principal.getAttributes();
            if (attributes != null)
            {
                logoutUrl = (String) attributes.get("logout_url");
            }
        }

        session.invalidate();
        return "{\"code\":20000,\"data\":\"success\",\"logoutUrl\":\"" + logoutUrl + "\"}";
    }

    @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\"}}";
    }
}

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [后端 分离 单点登录] 推荐:

前后端分离单点登录方案

- - 企业架构 - ITeye博客
修改src/permission.js文件. 修改src/utils/request.js文件. 修改vue.config.js文件. 修改src\store\modules\user.js文件. //引入Spring-Session依赖. //引入Cas-Client依赖. 修改application.properties文件.

cas配置单点登录

- - 开源软件 - ITeye博客
        最近一段时间研究的cas,不知道是什么原因,可能自己最近太浮躁了,没有沉下心来去研究,所以一直拖着,将近拖了一周半的时间,上周的周总结,确保一定要解决的问题,今天还是横下心来,处理完这个问题,我是一个对于技术痴迷的人,对于现在研究出来这个结果非常高兴,与大家分享一下:.        注明:本文所讲的至少怎么配置,但是具体的原理和细节会在稍后的时间里更新给大家,如有不对的地方希望大家指出来,共同学习和探讨一下.

android 单点登录功能

- - CSDN博客移动开发推荐文章
很多伙伴在开发自己公司产品的时候,一般都会考虑用户账号安全 ,或者用户账号功能使用限制等问题. 这时候我们就会考虑到单点登录这个功能. 一般情况下我们在开发单点登录功能的时候,其实有很多种做法,这个根据自己的具体需求选择就可以,其实我一直认为很多东西没有绝对的规则,我们其实需要做的是尽量全面的尽可能多的去掌握更多的知识技术,当我们用到的时候可以从中选择出最适合自己的产品的技术,从开发时间,应用性等.

CAS解决单点登录SSO

- - CSDN博客推荐文章
关于CAS很多的原理和基础的配置启动,网上是很多的,我更多是结合我的实践和心得. 需要了解CAS的原理,认证协议,认证流程,可以参考以下文章. 让CAS支持客户端自定义登陆页面——客户端篇. CAS原理与配置-基于CAS的单点登陆的研究(上). 单点登录(SSO)是企业开发的重要问题,在我的毕设项目中,由于要和系统其他开发模块共用用户认证模块,方便共享用户资源,所以需要一个好的SSO解决方案.

自己动手写SSO(单点登录)

- - ITeye博客
SSO在我们的应用中非常常见,例如我们在OA系统登录了,我们就可以直接进入采购系统,不需要再登录了,这样使我们非常方便. 现在网上也有很多实现方法,于是乎我也想写一个看看. 我主要用到的是cookie的机制. 在此,分享给大家, 同时提供源代码下载. SSO的实现一般是会有一个SSO Server,也会叫认证中心,同时也会有被认证的系统,如OA系统、采购系统等,他们就相当于SSO Server的client.

CAS 4.0 单点登录教程

- - ITeye博客
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一. SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 耶鲁大学(yale)开发的单点登录(Single Sign On)系统称为CAS(Central Authentication Service)被设计成一个独立的Web应用程序(cas.war).

CAS实现SSO单点登录原理

- - 非技术 - ITeye博客
CAS实现SSO单点登录原理. CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO ). CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG 的一个项目.

单点登录SSO的实现原理

- - 非技术 - ITeye博客
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任. 单点登录在大型网站里使用得非常频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉.

CAS单点登录(SSO)完整教程

- - 互联网 - ITeye博客
CAS单点登录(SSO)完整教程(2012-02-01更新). 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤. 单点登录(SSO):请看百科解释. 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Authentication Server),. CAS Server版本:cas-server-3.4.3.1、cas-server-3.4.10.

前后端分离了,然后呢?

- - ITeye资讯频道
前后端分离已经是业界所共识的一种开发/部署模式了. 关于前后端开发的另一个讨论可以参考这里. 即使通过API来解耦前端和后端开发过程,前后端通过RESTFul的接口来通信,前端的静态内容和后端的动态计算分别开发,分别部署,集成仍然是一个绕不开的问题 — 前端/后端的应用都可以独立的运行,但是集成起来却不工作.