技术开发 频道

安全框架:让Apache Shiro保护你的应用

  Web会话管理

  最后值得一提的是Shiro在Web环境中对会话的支持。

  缺省Http会话

  对于Web应用,Shiro缺省将使用我们习以为常的Servlet容器会话作为其会话基础设施。即,当你调用subject.getSession()和subject.getSession(boolean)方法时,Shiro会返回Servlet容器的HttpSession实例支持的Session实例。这种方式的曼妙之处在于调用subject.getSession()的业务层代码会跟一个Shiro Session实例交互 - 还没有“认识”到它正跟一个基于Web的HttpSession打交道。这在维护架构层之间的清晰隔离时,是一件非常好的事情。

  Web层中Shiro的原生会话

  如果你由于需要Shiro的企业级会话特性(如容器无关的集群)而打开了Shiro的原生会话管理,你当然希望HttpServletRequest.getSession()和HttpSession API能和“原生”会话协作,而非Servlet容器会话。如果你不得不重构所有使用HttpServletRequest和HttpSession API的代码,使用Shiro的Session API来替换,这将非常令人沮丧。Shiro当然从来不会期望你这么做。相反,Shiro完整实现了Servlet规范中的Session部分以在Web应用中支持原生会话。这意味着,不管何时你使用相应的HttpServletRequest或HttpSession方法调用,Shiro都会将这些调用委托给内部的原生会话API。结果,你无需修改Web代码,即便是你正在使用Shiro的‘原生’企业会话管理 - 确实是一个非常方便(且必要)的特性。

  附加特性

  • Apache Shiro框架还包含有对保护Java应用非常有用的其他特性,如:
  • 为维持跨线程的Suject提供了线程和并发支持(支持Executor和ExecutorService);
  • 为了将执行逻辑作为一种特殊的Subject,支持Callable和Runnable接口;
  • 为了表现为另一个Subject的身份,支持“Run As”(比如,在管理应用中有用);
  • 支持测试工具,这样可以很容易的对Shiro的安全代码进行单元测试和集成测试。

  框架局限

  常识告诉我们,Apache Shiro不是“银弹” - 它不能毫不费力的解决所有安全问题。如下是Shiro还未解决,但是值得知道的:

  • 虚拟机级别的问题:Apache Shiro当前还未处理虚拟机级别的安全,比如基于访问控制策略,阻止类加载器中装入某个类。然而,Shiro集成现有的JVM安全操作并非白日做梦 - 只是没人给项目贡献这方面的工作。
  • 多阶段认证:目前,Shiro不支持“多阶段”认证,即用户可能通过一种机制登录,当被要求再次登录时,使用另一种机制登录。这在基于Shiro的应用中已经实现,但是通过应用预先收集所有必需信息再跟Shiro交互。这个功能在Shiro的未来版本中非常有可能得到支持。
  • Realm写操作:目前所有Realm实现都支持“读”操作来获取验证和授权数据以执行登录和访问控制。诸如创建用户帐户、组和角色或与用户相关的角色组和权限这类“写”操作还不支持。这是因为支持这些操作的应用数据模型变化太大,很难为所有的Shiro用户强制定义“写”API。

  未来的特性

  Apache Shiro社区每天都在壮大,借此,Shiro的特性亦是如此。在即将发布的版本中,你可能会看到:

  • 更干净的Web过滤机制,无需子类化就可支持更多的插件式过滤器。
  • 更多可插拔的缺省Realm实现,优先采用组合而非继承。你可以插入查找认证和授权数据的组件,无需实现为Shiro Realm的子类;
  • 强健的OpenID和OAuth(可能是混合)客户端支持;
  • 支持Captcha;
  • 针对纯无状态应用的配置简化(如,许多REST环境);
  • 通过请求/响应协议进行多阶段认证;
  • 通过AuthorizationRequest进行粗粒度的授权;
  • 针对安全断言查询的ANTLR语法(比如,(‘role(admin) && (guest || !group(developer))’)

  总结

  Apache Shiro是一个功能齐全、健壮、通用的Java安全框架,你可以用其为你的应用护航。通过简化应用安全的四个领域,即认证、授权、会话管理和加密,在真实应用中,应用安全能更容易被理解和实现。Shiro的简单架构和兼容JavaBean使其几乎能够在任何环境下配置和使用。附加的Web支持和辅助功能,比如多线程和测试支持,让这个框架为应用安全提供了“一站式”服务。Apache Shiro开发团队将继续前进,精炼代码库和支持社区。随着持续被开源和商业应用采纳,可以预期Shiro会继续发展壮大。

1
相关文章