SpringBoot+MyBatis+Redis实现SSO单点登录系统(二)
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单点登录系统(二)相关推荐
- SpringBoot+MyBatis+Redis实现SSO单点登录系统(一)
SpringBoot+MyBatis+Redis实现SSO单点登录系统(一) 一.SSO系统概述 SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可 ...
- 互联网分布式微服务云平台规划分析--SSO单点登录系统
介绍 鸿鹄云架构[SSO单点登录系统]为所有微服务提供统一的用户认证服务,系统本身属于微服务模式,使用JWT+Redis分布式存储方案,确保不同微服务.系统之间的安全通讯和统一用户校验.认证.在整个服 ...
- SpringBoot 简单实现仿CAS单点登录系统
SpringBoot 简单实现仿CAS单点登录系统 新境界开源开源SSO项目介绍 新境界开源SSO项目实现原理大致如下: 新境界开源SSO项目登录流程介绍 新境界开源SSO项目授权登录流程介绍 新境界 ...
- sso单点登录系统(解决session共享)
场景:假设一个用户将自己的登录信息提交到后台,如果session保存的信息分布在多台机器上,并且不共享,那么可能导致用户的登录信息出现短暂的丢失,为什么这样讲,因为用户访问服务器中间还要经过负载均衡服 ...
- Shiro整合SSO单点登录系统
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37797991/article/ ...
- SSO单点登录系统的实战运用
通用介绍 单点登录系统,简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.任何SSO框架都需要创建统一的认 ...
- 手撕一套sso(单点登录)系统之原理篇1
在手撕之前,你首先要了解一些原理,我写的案例成品可以访问zauth,语言是Java8. 目录 1.关于Http 2.用户信息怎么存?存什么?存在哪? 2.1 使用前端存储技术Storage或index ...
- SpringBoot实现基础的sso单点登录
前言 本文借鉴学习了团团大佬的文章和源码 原文地址 想知道单点登录原理等理论可以移步大佬文章 代码及实现 本次学习基于session模拟了数据库查询和token权限认证 构建 准备三个服务器,这里用三 ...
- sso单点登录系统的理解
单点登录有两种方式,一种是跨域,一种是不跨域. 一:在不跨域的情况下, 只需要将cookie设置为顶域状态,即可以实现cookie的共享. 二:跨域登录 用户访问app系统,app系统是需要登录的,但 ...
最新文章
- 【Python】有道翻译的爬虫实现(前篇)
- Wireshark默认不抓取本地包的解决方式
- bzoj1951 组合数取模 中国剩余定理
- 美团2015校招哈尔滨站笔试题--第二题
- python调用matlab环境配置、非常详细!!!_Python调用Matlab2014b引擎
- sql常用crud命令
- 关于WinForms的跨显示器DPI自适应
- windows内核——基石
- 求助微软商店下载的Ubuntu打开后显示目标路径参数错误,进入路径强制打开显示0x80070005错误。各种方法都试验了
- 求助ReportMachine报表,收集ReportMachine资料
- 河北源达投顾:用专业教学,用智能解决选股烦恼
- U盘写保护,不能被格式化
- 研究生阶段如何学习、做研究(超棒)
- 华为手机摄影入门到精通pdf_华为手机摄影从入门到精通
- DeferredShading
- 解决viewUI中 DatePicker控件获取的日期总是少一天的问题
- java求因子_一个数恰好等于它的因子之和java
- 今天, IG 帮我们圆梦
- Landsat系列卫星介绍及影像下载
- 数学建模语言AMPL及其应用