为什么要实现单点登录?
单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要 登录一次 就可以访问所有相互信任的应用系统。

本文从公司开发需求出发,用springboot+shiro+redis完成对会话的管理,实现单点登录。
下面贴出具体实现代码:
pom文件依赖:

<!-- 配置使用redis启动器 --><dependency><groupId>org.crazycake</groupId><artifactId>shiro-redis</artifactId><version>2.4.2.1-RELEASE</version></dependency>

yml文件(配置redis连接)

spring:redis:host: 127.0.0.1port: 6379max-idle: 8min-idle: 0max-active: 8maxwait: -1timeout: 0isRedisCache: 1  #是否使用redis缓存

配置文件(采用springboot java配置):
shiroConfig.java配置(下面贴出的是需要添加修改的代码配置)

@Configuration
public class ShiroConfig {private Logger logger = Logger.getLogger(ShiroConfig.class);//取redis连接配置@Value("${spring.redis.host}")private String host;@Value("${spring.redis.port}")private int port;@Value("${spring.redis.timeout}")private int timeout;@Value("${spring.redis.isRedisCache}")private int isRedisCache;@Beanpublic EhCacheManager getEhCacheManager() {EhCacheManager em = new EhCacheManager();em.setCacheManagerConfigFile("classpath:config/ehcache.xml");return em;}@BeanUserRealm userRealm(EhCacheManager cacheManager) {UserRealm userRealm = new UserRealm();// userRealm.setCacheManager(cacheManager);可以注释,下面重复了。return userRealm;}/*** 配置shiro redisManager* * @return*/@Beanpublic RedisManager redisManager() {RedisManager redisManager = new RedisManager();redisManager.setHost(host);redisManager.setPort(port);redisManager.setExpire(1800);// 配置过期时间logger.info("配置redis连接设置##########" + host + ":::" + port);return redisManager;}/*** cacheManager 缓存 redis实现* * @return*/public RedisCacheManager cacheManager() {RedisCacheManager redisCacheManager = new RedisCacheManager();redisCacheManager.setRedisManager(redisManager());return redisCacheManager;}@BeanSessionDAO sessionDAO() {logger.info("是否使用redis缓存");if (1 == isRedisCache) {RedisSessionDAO redisSessionDAO = new RedisSessionDAO();redisSessionDAO.setRedisManager(redisManager());logger.info("设置redisSessionDAO");return redisSessionDAO;} else {MemorySessionDAO sessionDAO = new MemorySessionDAO();logger.info("设置MemorySessionDAO");return sessionDAO;}}@Beanpublic SessionManager sessionManager() {DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();Collection<SessionListener> listeners = new ArrayList<SessionListener>();listeners.add(new BDSessionListener());sessionManager.setSessionListeners(listeners);sessionManager.setSessionDAO(sessionDAO());return sessionManager;}@BeanSecurityManager securityManager(UserRealm userRealm) {DefaultWebSecurityManager manager = new DefaultWebSecurityManager();manager.setRealm(userRealm);if (1 != isRedisCache) {manager.setCacheManager(getEhCacheManager());logger.info("设置getEhCacheManager");}logger.info("设置sessionManager");manager.setSessionManager(sessionManager());return manager;}......//其他配置默认
}

这样配置就可以了,接下来启动看看,不出所料,报错了,当然不是所有人都是,得看个人配置:
错误:
1、获取不到redis连接配置:
贴出日志

2017-12-29 11:35:17.550  INFO 7196 --- [restartedMain] com.bootdo.system.config.ShiroConfig     : 设置getEhCacheManager
2017-12-29 11:35:17.550  INFO 7196 --- [restartedMain] com.bootdo.system.config.ShiroConfig     : 设置sessionManager
2017-12-29 11:35:17.552  INFO 7196 --- [restartedMain] com.bootdo.system.config.ShiroConfig     : 是否使用redis缓存
2017-12-29 11:35:17.552  INFO 7196 --- [restartedMain] com.bootdo.system.config.ShiroConfig     : 设置MemorySessionDAO
2017-12-29 11:35:19.056  INFO 7196 --- [restartedMain] com.bootdo.system.config.ShiroConfig     : 配置redis连接设置##########null:::0

获取不到redis连接配置!!!
解决方式:
shiroConfig里修改

@Bean("lifecycleBeanPostProcessor")public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {return new LifecycleBeanPostProcessor();}

参考:http://blog.csdn.net/z1729734271/article/details/78930292

2、类型转换错误:

2017-12-29 11:36:43.079 ERROR 7956 --- [http-nio-80-exec-8] c.b.common.exception.BDExceptionHandler  : com.bootdo.system.domain.UserDO cannot be cast to com.bootdo.system.domain.UserDOjava.lang.ClassCastException: com.bootdo.system.domain.UserDO cannot be cast to com.bootdo.system.domain.UserDOat com.bootdo.common.utils.ShiroUtils.getUser(ShiroUtils.java:13) ~[classes/:na]at com.bootdo.common.controller.BaseController.getUser(BaseController.java:10) ~[classes/:na]at com.bootdo.common.controller.BaseController.getUserId(BaseController.java:14) ~[classes/:na]at com.bootdo.system.controller.LoginController.index(LoginController.java:43) ~[classes/:na]

解决方式:
注释掉pom文件里的热部署依赖,得以解决

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>

参考:http://blog.csdn.net/z1729734271/article/details/78930708

这样我们springboot-shiro-redis缓存实现单点登录就已经完成了,期间遇到的问题也顺利解决,简单记录下,有不对的地方或者有不清楚的地方小伙伴可以留言讨论~

springboot-shiro-redis缓存实现单点登录 yml相关推荐

  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. springboot+shiro+redis+jwt实现多端登录:PC端和移动端同时在线(不同终端可同时在线)

    前言 之前写了篇 springboot+shiro+redis多端登录:单点登录+移动端和PC端同时在线 的文章,但是token用的不是 jwt 而是 sessionID,虽然已经实现了区分pc端和移 ...

  4. Shiro教程_2 Shiro+SpringBoot+Mysql+Redis(缓存)

    源代码 https://gitee.com/fakerlove/Shiro Shiro+SpringBoot+Mysql+Redis(缓存) 1. 添加依赖 <?xml version=&quo ...

  5. springboot+shiro+redis项目整合

    介绍: Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码学和会话管理.使用Shiro的易于理解的API,您可以快速.轻松地获得任何应用程序,从最小的移动应用程序到最 ...

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

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

  7. SpringBoot与Redis缓存

    SpringBoot与Redis缓存: 准备 在Docker安装Redis 连接成功 对于Redis不熟悉的同学可以在本站搜索Redis的文章阅读. 整合Redis 在pom文件中加入 12345 & ...

  8. SpringBoot集成Redis缓存

    SpringBoot集成Redis缓存 前言 本系列文章将简单的学习SpringCloud微服务相关知识,其实也是因为时间的原因,一直拖到现在,遂打算趁着假期,决定记录下来. 从天气预报微服务系统的单 ...

  9. SpringBoot 使用Redis缓存

    SpringBoot 使用Redis缓存 1. 添加依赖 <!-- redis依赖包 --> <dependency><groupId>org.springfram ...

最新文章

  1. python中读写excel的扩展库_Python读写Excel文件第三方库汇总,你想要的都在这儿!...
  2. JAVA虚拟机运行数据区
  3. interface关键字
  4. word手写字体以假乱真_轻松制作个人“电子版手写签名”
  5. vs vue 查看webpack安装成功_在Vue+webpack中详细讲解基础配置
  6. SQL语句取某字段最大的那一条记录
  7. ORA-01810格式代码出现两次 的解决方案
  8. sicily 1022. Train Problem
  9. Reverse Interger
  10. java servlet JSP 区别_servlet和jsp的区别
  11. WPS Office 2012 专业版 附正版序列号
  12. Windows7 professional 64安装英文语言包
  13. 网络传输协议都有什么
  14. Forth 语言概要
  15. 新建一个html代码页面,三分钟教你创建一个简单的网页
  16. TJ Wi-Fi不能使用的解决的办法
  17. vue 在线编辑excel表格(原生和使用组件的两种方式)
  18. Linux —— 基础开发工具的基本使用 —— yum、vim、gcc、make和makefile,gdb的简单应用
  19. 用C++11的多线程读文件
  20. datastage服务器项目nls安装,datastagedads - 图文

热门文章

  1. 红细胞膜封装负载姜黄素的金纳米粒子|红细胞膜包载粉防己碱PLGA纳米粒
  2. java计算机毕业设计校园互助系统源代码+数据库+系统+lw文档
  3. NLP Spacy中en_core_web_sm安装问题(附最新下载地址)
  4. 写一篇300字前端开发实习日报,以学习了vue为开头
  5. 查看oracle的sga的大小,查寻Oracle的后台进程和SGA的大小
  6. 伴随矩阵和原矩阵的关系+AB=0+由伴随矩阵求原矩阵(当伴随矩阵的秩不为零时(A=(\frac{A*}{|A|})^{-1}))
  7. 计算机c语言期末答案,计算机C语言期末考试复习试题及答案[1]
  8. 深入理解Socket的读写
  9. 2019年最高薪的10个IT认证
  10. snprintf函数使用总结