shiro会话管理和加密

authentication(认证),authorization(授权),session management(会话管理),cryptography(加密)被shiro框架的开发团队称之为应用安全的四大基石。前面两章我们掌握了shiro的认证和授权,接下来我们学历了一下会话管理和加密。

1,会话管理

	shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如Tomcat),不管是J2SE还是J2SE环境都可以使用,提供了会话管理,会话事件监听,会话存储/持久化,容器无关的集群,失效/过期支持,对web的透视支持,sso单点登录的支持等特性。

1.1会话相关API

subject.getsession():获取会话,等价于subject.getSession(true),即如果当前没有创建session对象会创建一个;subject.getSession(false),如果当前没有创建session对象则返回null。
session.setAttribute(key,val):设置会话属性
session.setAttribute(key):获取会话属性
session.removeAttribute(key):删除会话属性

1.1.2sessionDAO

abstractsessionDAO:提供sessionDAO的基础实现,如生成会话ID等。
cachingSessionDAO:提供了对开发者透明的会话缓存的功能,需要设置相应的cacheManager。
MemorySessionDAO:直接在内存中进行会话维护。
enterpriseCacheSessionDAO:提供了缓存功能的会话维护,默认情况下使用MapCaChe实现,内部使用ConcurrentHashMap保存缓存的会话。

改造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.3.1哈希与盐

如果你需要保存密码(比如网站用户的密码),你要考虑如何保护这些密码数据,向像下面那样直接密码写入数据库中是即不安全的,因为任何打开数据的人,都将可以直接看到这样密码,

,不如之前的600w CSDN账号泄露对用户可能造成很大的损失。

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

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

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

1.4 登录次数限制

前面我们已经实现了加密和验证,大大提高了系统的安全性。在系统中,还可以对登录失败次数进行限制。如在1小时内密码最多重试5次,如果尝试次数超过5次就锁定1小时,1小时后再次重试,防止密码被暴力破解。
因为需要将锁定时间控制在一个规定的时间内,此处可结合Redis缓存实现。

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页