apache shiro怎么升级_你不知道系列之Shiro

Shiro是Apache一款开源产品,它是一款安全框架,它支持多语言开发,而且使用起来比较简单,因此使用的人数也是可观的。我们还知道一款spring开发的框架,SpringSecurity 这款安全框架功能更加强大,但是使用起来相对shiro较复杂。shiro可以开发出比较好的应用 它不仅可以在JavaSE程序中使用,也可以在复杂EJB程序中使用,还能在WEB程序中使用,所以它的应用非常广泛的。shiro给我们提供了很多功能如认证、授权、会话管理、密码学、web集成、缓存、高并发支持等。具体请看下图。

e5ea1c55aa2889da34d8c249279d59d7.png

Authentication: 认证/登陆。 认证用户是不是拥有相应的身份。

Authorization: 授权验证。即对某个用户进行权限验证,判断该用户是否有某些功能点的权限,也可以细粒度的验证。

SessionManagement: 会话管理。会话即用户登陆一次就是一次会话,会话信息在未退出前或者未过期一直存储在会话信息中。会话可以是javaSE中也可以是WEB中。

Cryptography: 加密密码, 保证数据的安全性。如常见的MD5加密。不过我们使用MD5可能会被反查,还是不够安全的,所以在使用MD5加密密码的时候我们一般会加一个salt代表盐。然后再存储比较进行验证。

WebSupport: 集成WEB环境。

Caching: 对我们访问数据进行缓存。如用户登陆的时候就将用户的信息进行缓存。当我们需要用户用到用户信息的时候直接去缓存获取。能提高访问性能。

Concurrecy: shiro支持多线程并发权限验证。比如在一个线程中开启另一个线程能把权限传递过去。

Testing: 支持测试。

Run As: 允许一个用户访问另一个用户前提是两者之间做了关联。有点像单点登陆的关系,但是笔者没有使用过shiro做单点登陆。对这方面不怎么了解。

RememberMe: 将session信息持久化保存了起来,下次会话不需要登陆。

值得提出来的是shiro不会自己主动去认证用户和授权需要自定义一下类去实现相关业务,然后告诉shiro是否认证成功,是否授权成功。

看了shiro的一些基本功能后笔者带着大家从整个应用的角度来看一下shiro。

46ca27766b8d47d32dbf5f395b62dc6e.png

上图是shiro从应用代码端请求我们的shiro应用,凡是与我们服务应用交互的对象我们都称之为Subject主体。这个主体对象只是接收请求保存一些数据,而每一个主体都是注册到Shiro的SecurityManager中这是Shiro的安全管理器,负责整个Shiro的工作控制模式。它能接收用户请求的信息,能访问Realm进行安全信息比对。Realm其实就是一个安全数据源,它是由开发者们自定义的,用来访问数据库中的安全数据。所以现在我们对shiro的工作模式一目了然吧!

如果还是觉得不够细的话,笔者再引入一张清晰而具体的内部图以供大家观赏。

c445b77ad419fe6737d338549bc29ac1.png

Subject:主体,可以看到主体是任何形式的与应用交互的。

SecurityManager: 安全管理器,它是shiro最核心的处理器,它管理着认证、授权、会话以及缓存。

Cryptography: 它是Shiro加密解密。

Authenticator: 认证器,它是一个可拓展点,如果觉得Shiro默认的认证器不好,可以自定义认证策略。

Authorizer: 授权器或者说访问控制器,判断主体请求是否有权限访问。

Realms: 一个或多个安全实体数据源,因为Shiro并不知道我们的数据,不过我记得Shiro有默认访问了它定义的表。但是一般在应用这我们需要自定义Realms。

SessionManager: 它是用来管理session生命周期的。

SessionDao: 数据会话访问层。用来做CRUD的。

CacheManager: 缓存管理器,比如我们的用户主体,角色,权限都可以缓存起来,提高性能。

我们首先来写一段代码来验证一下Shiro这个安全框架然后我们再去分析它的源码。

package com.xiaohei.test;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.AuthenticationException;import org.apache.shiro.authc.UsernamePasswordToken;import org.apache.shiro.config.IniSecurityManagerFactory;import org.apache.shiro.mgt.SecurityManager;import org.apache.shiro.subject.Subject;import org.apache.shiro.util.Factory;import org.junit.Assert;import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class ShiroTest { private final Logger log = LoggerFactory.getLogger(this.getClass()); @Test public void testShiro(){ // 构建securityManager安全管理器工厂获取管理器对象 Factory factory = new IniSecurityManagerFactory("classpath:account.ini"); // 获取securityManager实例 SecurityManager instance = factory.getInstance(); // 将SecurityManager实例设置到工具类中 SecurityUtils.setSecurityManager(instance); // 获取认证主体 Subject subject = SecurityUtils.getSubject(); // 构建认证token UsernamePasswordToken token = new UsernamePasswordToken("zhang
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值