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

三、代码

配置文件配置数据库,redis等相关的信息。

# See http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
# Thymeleaf配置
spring.thymeleaf.cache=false
spring.thymeleaf.mode=HTML
spring.main.show-banner=false
spring.thymeleaf.prefix=classpath:/templates
spring.thymeleaf.suffix=.html
logging.level.jdbc=OFF
logging.level.jdbc.sqltiming=DEBUG
logging.level.jdbc.resultsettable=DEBUG
# 数据库配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/taotao?useSSL=false
spring.datasource.username=root
spring.datasource.password=root# 日志配置
logging.config=classpath:logback-spring.xml
logging.level.root=info# MyBatis配置
mybatis.type-aliases-package=cn.hzr0523.entity
mybatis.mapper-locations=classpath:mapper/*.xml#Redis Cluster
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456
spring.redis.maxTotal=30USER_SESSION_KEY=REDIS_USER_SESSION
SSO_SESSION_EXPIRE=30

接着,是jedisConfig的配置,采用java配置方式,取代了xml配置,也是Spring Boot推荐的一种配置方式。

package cn.hzr0523.service.impl;import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;@Configuration
public class JedisConfig {@Value("${spring.redis.maxTotal}")public Integer maxTotal;@Value("${spring.redis.host}")public String host;@Value("${spring.redis.port}")public Integer port;@Value("${spring.redis.password}")public String password;@Beanpublic JedisPoolConfig jedisPoolConfig() {JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();jedisPoolConfig.setMaxTotal(maxTotal);return jedisPoolConfig;}@Beanpublic JedisPool jedisPool() {JedisPool jedisPool = new JedisPool(jedisPoolConfig(), host, port, 30, password);return jedisPool;}
}

接下来jedis工具类的编码:

package cn.hzr0523.service;
public interface JedisClient {String get(String key);String set(String key, String value);String hget(String hkey, String key);long hset(String hkey, String key, String value);long incr(String key);long expire(String key, int second);long ttl(String key);long del(String key);long hdel(String hkey, String key);
}
package cn.hzr0523.service.impl;import cn.hzr0523.service.JedisClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;/*** 单个redis*/
@Service
public class JedisClientSingle implements JedisClient {@Autowiredprivate JedisPool jedisPool;@Overridepublic String get(String key) {Jedis jedis = jedisPool.getResource();String string = jedis.get(key);jedis.close();return string;}@Overridepublic String set(String key, String value) {Jedis jedis = jedisPool.getResource();String string = jedis.set(key, value);jedis.close();return string;}@Overridepublic String hget(String hkey, String key) {Jedis jedis = jedisPool.getResource();String string = jedis.hget(hkey, key);jedis.close();return string;}@Overridepublic long hset(String hkey, String key, String value) {Jedis jedis = jedisPool.getResource();Long result = jedis.hset(hkey, key, value);jedis.close();return result;}@Overridepublic long incr(String key) {Jedis jedis = jedisPool.getResource();Long result = jedis.incr(key);jedis.close();return result;}@Overridepublic long expire(String key, int second) {Jedis jedis = jedisPool.getResource();Long result = jedis.expire(key, second);jedis.close();return result;}@Overridepublic long ttl(String key) {Jedis jedis = jedisPool.getResource();Long result = jedis.ttl(key);jedis.close();return result;}@Overridepublic long del(String key) {Jedis jedis = jedisPool.getResource();Long result = jedis.del(key);jedis.close();return result;}@Overridepublic long hdel(String hkey, String key) {Jedis jedis = jedisPool.getResource();Long result = jedis.hdel(hkey, key);jedis.close();return result;}
}

接下来就可以使用redis了

public ResultObject userLogin(UserDTO userDTO, HttpServletRequest request, HttpServletResponse response) {ResultObject resultObject = new ResultObject();if (userDTO == null) {resultObject.setResultCode("0");resultObject.setResultMessage("参数错误");return resultObject;}//根据登录信息查询学员信息TbUser user = userMapper.getUserInfo(userDTO.getUserName(), userDTO.getPassword());if (user == null) {resultObject.setResultCode("0");resultObject.setResultMessage("用户名或密码错误");return resultObject;}//登录成功,把用户信息写入redis//String s = jedisClientSingle.get(USER_SESSION_KEY);//logger.info("USER_SESSION_KEY: " + s);//生成一个用户tokenString token = UUID.randomUUID().toString();logger.info(JSONObject.toJSONString(user));jedisClient.set(USER_SESSION_KEY + ":" + token, JSONObject.toJSONString(user));//设置session过期时间jedisClient.expire(USER_SESSION_KEY + ":" + token, SSO_SESSION_EXPIRE);//添加写cookie的逻辑,cookie的有效期是关闭浏览器就失效。CookieUtils.setCookie(response, "TT_TOKEN", token, -1);//返回tokenresultObject.setResultCode("1");resultObject.setResultMessage("登录成功");resultObject.setResultData(token);return resultObject;}

简单小demo,也是参考别人写的,在编写过程中也遇到了一些问题,包括redis的安装,jedis的使用。有错才能成长,大家一起进步。

SpringBoot+MyBatis+Redis实现SSO单点登录系统(二)相关推荐

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

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

  2. 互联网分布式微服务云平台规划分析--SSO单点登录系统

    介绍 鸿鹄云架构[SSO单点登录系统]为所有微服务提供统一的用户认证服务,系统本身属于微服务模式,使用JWT+Redis分布式存储方案,确保不同微服务.系统之间的安全通讯和统一用户校验.认证.在整个服 ...

  3. SpringBoot 简单实现仿CAS单点登录系统

    SpringBoot 简单实现仿CAS单点登录系统 新境界开源开源SSO项目介绍 新境界开源SSO项目实现原理大致如下: 新境界开源SSO项目登录流程介绍 新境界开源SSO项目授权登录流程介绍 新境界 ...

  4. sso单点登录系统(解决session共享)

    场景:假设一个用户将自己的登录信息提交到后台,如果session保存的信息分布在多台机器上,并且不共享,那么可能导致用户的登录信息出现短暂的丢失,为什么这样讲,因为用户访问服务器中间还要经过负载均衡服 ...

  5. Shiro整合SSO单点登录系统

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37797991/article/ ...

  6. SSO单点登录系统的实战运用

    通用介绍 单点登录系统,简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.任何SSO框架都需要创建统一的认 ...

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

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

  8. SpringBoot实现基础的sso单点登录

    前言 本文借鉴学习了团团大佬的文章和源码 原文地址 想知道单点登录原理等理论可以移步大佬文章 代码及实现 本次学习基于session模拟了数据库查询和token权限认证 构建 准备三个服务器,这里用三 ...

  9. sso单点登录系统的理解

    单点登录有两种方式,一种是跨域,一种是不跨域. 一:在不跨域的情况下, 只需要将cookie设置为顶域状态,即可以实现cookie的共享. 二:跨域登录 用户访问app系统,app系统是需要登录的,但 ...

最新文章

  1. 【Python】有道翻译的爬虫实现(前篇)
  2. Wireshark默认不抓取本地包的解决方式
  3. bzoj1951 组合数取模 中国剩余定理
  4. 美团2015校招哈尔滨站笔试题--第二题
  5. python调用matlab环境配置、非常详细!!!_Python调用Matlab2014b引擎
  6. sql常用crud命令
  7. 关于WinForms的跨显示器DPI自适应
  8. windows内核——基石
  9. 求助微软商店下载的Ubuntu打开后显示目标路径参数错误,进入路径强制打开显示0x80070005错误。各种方法都试验了
  10. 求助ReportMachine报表,收集ReportMachine资料
  11. 河北源达投顾:用专业教学,用智能解决选股烦恼
  12. U盘写保护,不能被格式化
  13. 研究生阶段如何学习、做研究(超棒)
  14. 华为手机摄影入门到精通pdf_华为手机摄影从入门到精通
  15. DeferredShading
  16. 解决viewUI中 DatePicker控件获取的日期总是少一天的问题
  17. java求因子_一个数恰好等于它的因子之和java
  18. 今天, IG 帮我们圆梦
  19. Landsat系列卫星介绍及影像下载
  20. 数学建模语言AMPL及其应用

热门文章

  1. 数据结构之内部排序一
  2. I2C总线信号时序总结
  3. shiro利用mysql动态授权_SpringBoot+Shiro学习之数据库动态权限管理和Redis缓存
  4. java面试中mysql_面试官:Mysql 中主库跑太快,从库追不上怎么整?
  5. android 画面,Android 界面组成
  6. ExecutorService--线程池
  7. 用实例的方式去理解storm的并发度
  8. BPM调用有webservice接口的.NET插件
  9. 举报入口_违法和不良信息举报中心
  10. activity 、window与view的关系 (上)