Shiro会话管理和加密

会话管理
Shiro提供了完整的企业级会话管理功能,不依赖于底层容器,不管是J2SE还是J2EE环境都可以使用,提供了会话管理,会话事件监听,会话事件监听,会话存储/持久化,容器无关的集群,失效/过期支持,对Web的透明支持,SSO单点登录的支持等特性.
会话管理API
Subject.getSession():获取会话,等价于Subject.getSession(true),既如果当前没有创建session对象会创建一个;Subject.getSession(false),如果当前没有创建session对象则返回null.
session.setAttribute(key,val):设置会话属性
session.getAttribute(key):获取会话属性
session.removeAttribute(key):删除会话属性
在这里插入图片描述
AbstractSessionDAO:提供了SessionDAO的基础实现,如生成会话ID等.
CachingSessionDAO:提供了对开发者透明的会话缓存的功能,需要设置相应的CacheManageer.
MemonrySesionDAO:直接在内存中进行会话维护.
EnterpriseCacheSessionDAO:提供了缓存功能的会话维护,默认情况下使用MapCache实现,内部使用ConcurrentHashMap 保存缓存的会话.
在实际开发中,如果要用到sessionIdGenerator属性,可以自定义类实现自EnterpriseCacheSessionDAO类,为其注入sessionIdGeneratior属性,如果用到缓存的话还可以注入一个缓存实现.然后将这个SessionDAO组件注入给SessionManager(会话管理器),最后将SessionManager配置给SescurityManager.
改造shiroconfig
shiroconfig改造的步骤如下:
● 注入Redis参数:@value注解从application.properties注解文件中获取
● 添加Redismanager():创建Rediscachemanager,注入Redismanager
● 添加cachemanager():创建Rediscachemanager,注入Redismanager
● 添加Redissessiondao():创建Redissessiondao,注入Redismanager
● 添加sessionmanager():创建sessionmanager,注入Redissessiondao
● 修改myshiroRealm():创建myShiroRealm,启用缓存
● 修改securityManager():创建securityManager,注入MyShiroRealm、RedisCacheManager、SessionManager

1.3.1哈希与盐
如果你需要保存密码(比如网站用户的密码),你要考虑如何保护这些密码数据,向像下面那样直接密码写入数据库中是即不安全的,因为任何打开数据的人,都将可以直接看到这样密码,不如之前的600w CSDN账号泄露对用户可能造成很大的损失。

解决的方法是密码加密后再存储进数据库,比较常用的加密方法是使用哈希函数(散列算法),常见的散列算法如 MD5,SHA等。哈希函数的具体定义,大家可以在网上或者相关书籍中查阅到,简单地说,它的特性如下:

原始密码经哈希函数计算后得到一个哈希值
改变原始密码,哈希函数计算出的哈希值也会相应改变
同样的密码,哈希值也是相同的 

哈希函数的单向、不可逆的。也就是说从哈希值,你无法推算出原始的密码是多少


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值