基于redis的单点登录设计:

1、用户登录成功后将登录状态等信息存储到redis

2、用户携带token去访问资源,资源服务器要基于token从redis查询用户信息

业务代码实现:

首先自定义一个用户名和密码,传到dologin方法中生成token。

在dologin方法中要先判断参数的合法性,用户名和密码要先判断不为null和空,使用.equals方法。抛异常的方法名是IllegalArgumentException。

2、判断用户是否存在,密码是否正确。抛异常是RuntimeException---运行时异常

3、将用户信息存储到redis中,首先要建立jedis连接,通过set方法去存储信息,K使用的token,生成uuid确保token的唯一性。

二、用户携带token去访问资源,资源服务器要基于token在redis查询信息。

首先判断token是否为空,如果为空那么请先登录。

然后基于token查询用户信息,token为K,获取value,是一个user集合,先判断user是否为空,为空则是登录超时,请重新登录。

判断用户是否有访问权限,通过user集合获取权限,

String permissionStr = map.get("permission");--获取全新信息。

String[] strings = permissionStr.split(",");---通过string.split(",")这个api方法来分隔字符串,生成一个数组

List<String> stringList = Arrays.asList(strings);----将数组转化成集合,来接收数据,

if (!stringList.contains("sys:resource:vier")){

throw new RuntimeException("你没有访问权限");

}----利用集合中的api方法,来判断当前用户有没有权限。

package com.jt.redis;import com.jt.JedisDataSource;
import redis.clients.jedis.Jedis;import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.UUID;public class SSODemo01 {
//    简易的单点登录系统,1、完成用户身份认证2、完成用户资源访问的权限
//    用户登录成功后,将用户信息存储到redis。并返回给客户端一个token
//    用户携带token访问资源,资源服务器要检查toke的有效性,并基于token查询用户信息
//    用户是否已经认证,假如已认证,还要判断用户是否有访问权限
public static void main(String[] args) {
//    1、执行登录操作String username = "tony";String password = "123456";String token = doLogin(username,password);System.out.println(token);
//  2、携带token访问资源Object result = doGetResource(token);System.out.println(result);
}private static String doGetResource(String token) {/*** 1、检验token是否为空* 2、基于token查询用户信息* 3、判断用是否已登陆* 4、判断用户是否有访问权限* 5、返回你要访问的资源*/if (token==null || "".equals(token)){throw new IllegalArgumentException("请先登录");}Jedis jedis = JedisDataSource.getConnection();Map<String, String> map = jedis.hgetAll(token);
//        3、判断用户是否已登录,没有登录抛异常if (map == null || map.size()==0){throw new RuntimeException("登录超时,请重新登录");}String permissionStr = map.get("permission");String[] strings = permissionStr.split(",");List<String> stringList = Arrays.asList(strings);System.out.println(stringList);if (!stringList.contains("sys:resource:vier")){throw new RuntimeException("你没有访问权限");}return "这就是你要访问的资源";}/*** 基于用户和密码登录,登录成功访问权限* @param username* @param password* @return,令牌对象,随机字符,具有唯一性*/private static String doLogin(String username, String password) {
//        1、判断参数的合法性if (username == null || "".equals(username)){throw new IllegalArgumentException("用户名不能为空");}if (password == null || "".equals(password)){throw new IllegalArgumentException("密码不能为空");}
//        2、判断用户是否存在if (!"tony".equals(username)){throw new RuntimeException("用户不存在");}
//        3、判断密码是否正确if (!"123456".equals(password)){throw new RuntimeException("密码错误");}
//        4、将用户信息存储到redisJedis jedis = JedisDataSource.getConnection();String token = UUID.randomUUID().toString();jedis.hset(token, "username", "tony");jedis.hset(token, "permission", "sys:resource:list,sys:resource:create");jedis.expire(token, 60);jedis.close();
//        5、返回tokenreturn token;}

基于redis的简易单点登录系统相关推荐

  1. SpringBoot+MyBatis+Redis实现SSO单点登录系统(二)

    SpringBoot+MyBatis+Redis实现SSO单点登录系统(二) 三.代码 配置文件配置数据库,redis等相关的信息. # See http://docs.spring.io/sprin ...

  2. SpringBoot+MyBatis+Redis实现SSO单点登录系统(一)

    SpringBoot+MyBatis+Redis实现SSO单点登录系统(一) 一.SSO系统概述 SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可 ...

  3. 基于cookie的SSO单点登录系统

    利用COOKIE实现单点登录功能 近期公司要求帮一个项目实现单点登录功能,在综合考量下决定采用cookie实现,大概的流程如下图所: 转载于:https://www.cnblogs.com/bugge ...

  4. codeigniter 禁止ip登录_「开源资讯」baigo SSO v4.0 beta-3 发布,单点登录系统

    来源:https://www.oschina.net/news/117020/baigo-sso-4-beta3-released 简介 baigo SSO 是一款基于 HTTP 协议的单点登录系统, ...

  5. 单点登录系统(SSO)的开发思路

    单点登录系统的类别:       就目前比较流行的应用来看,单点登录系统主要分为三种类型:一种是基于oauth协议的网络令牌(我是这么叫的),一种是基于Web Service或者简单Http协议实现的 ...

  6. 单点登录系统实现基于SpringBoot

    今天的干货有点湿,里面夹杂着我的泪水.可能也只有代码才能让我暂时的平静.通过本章内容你将学到单点登录系统和传统登录系统的区别,单点登录系统设计思路,Spring4 Java配置方式整合HttpClie ...

  7. 基于Session共享的单点登录或通行证系统方案

    本文主要描述如何基于Session共享来实现单点登录. 假设有两个应用www.example.com, passport.example.com.本文以SpringSession和Redis来实现相关 ...

  8. 简易的单点登录系统代码实现

    本文是对单点登录系统的一个简易代码实现,具体原理见 单点登录原理与简单实现 (可点击). 代码只涉及最基础的单点登录与注销.不涉及角色.权限.加密等.因为如果我们系统真要使用单点登录的话,应该不会自己 ...

  9. golang 单点登录系统(go-sso)

    这是一个基于Go语言开发的单点登录系统,实现手机号注册.手机号+验证码登录.手机号+密码登录.账号登出等功能,用户认证采用cookie和jwt两种方式.收发短信相关方法已提供,仅需根据短信通道提供商提 ...

  10. 手撕一套sso(单点登录)系统之原理篇1

    在手撕之前,你首先要了解一些原理,我写的案例成品可以访问zauth,语言是Java8. 目录 1.关于Http 2.用户信息怎么存?存什么?存在哪? 2.1 使用前端存储技术Storage或index ...

最新文章

  1. VMware 虚拟化编程(9) — VMware 虚拟机的快照
  2. 视频监控软件 SecuritySpy 简介
  3. BugTracker.NET安装指南
  4. 安装Go 1.9.2
  5. 读Pyqt4教程,带你入门Pyqt4 _007
  6. 淘宝天猫京东商品详情一键铺货到拼多多平台店铺接口代码对接教程
  7. VAX 的使用快捷键
  8. phpnow mysql升级,phpnow升级apache版本
  9. java--------------
  10. 15年30亿设备,安卓如何从0到最大的操作系统?
  11. Keil 5报错error C216: subscript on non-array or too many dimensions
  12. python卡方检验计算pvalue值_Python数据科学:卡方检验
  13. 祝学校计算机系的新年贺词,计算机工程学院 2019祝福情景剧
  14. 面向过程、基于对象、面向对象、分析
  15. SQLServer As
  16. CANoe.DiVa操作指南——基于DoIP使用CANoe.DiVa用于UDS一致性测试
  17. php调用会员刷卡,dedecms模板中调用会员信息标签的方法
  18. JAVA 数据类型强制转换详解
  19. 【python句柄获取】——简单明了的获取窗口句柄,并使用句柄操作获取相应内容(全网最详细)
  20. java URLEncoder转码

热门文章

  1. 国外苹果id_爆料者称苹果仍在继续研发iPhone屏下Touch ID
  2. HMM隐马尔可夫模型-通俗易懂
  3. Mysql获取流水号
  4. crt是什么意思 windows编程_软件工程师应该知道的关于Windows API、CRT和STL二三事...
  5. python socket编程详细教程_最基础的Python的socket编程入门教程
  6. ubuntu freeradius mysql_初试freeradius
  7. 摆脱某某助手,使用无线投屏功能共享安卓屏幕到PC
  8. java分层ppt_java程序设计第10章图形用户界面.ppt
  9. 基于Android studio开发的图灵智能聊天机器人
  10. 【日语】日语动词的敬体与简体