shiro 安全框架入门,看这一篇就够了( 六 )

您会看到Shiro在很大程度上简化了哈希和编码,从而在此过程中节省了一些理智 。
密码密码是可以使用密钥可逆地转换数据的密码算法 。我们使用它们来保护数据安全,尤其是在传输或存储数据时,尤其是在数据容易被撬开的时候 。
如果您曾经使用过JDK密码API,尤其是javax.crypto.Cipher类,那么您就会知道,驯服它可能是一件极其复杂的事情 。对于初学者来说,每种可能的Cipher配置始终由javax.crypto.Cipher的实例表示 。
需要做公钥/私钥加密吗?
您使用密码 。是否需要使用分组密码进行流操作?您使用密码 。是否需要创建AES 256位密码来保护数据?您使用密码 。你明白了 。
以及如何创建所需的Cipher实例?
您创建了一个复杂的,不直观的,用令牌分隔的密码选项字符串,称为“转换字符串”,并将该字符串传递给Cipher.getInstance静态工厂方法 。使用这种密码选项字符串方法,没有类型安全性来确保您使用有效的选项 。这也隐含地意味着没有JavaDoc可以帮助您了解相关选项 。而且,即使您知道配置正确,也需要处理经过检查的异常,以防您的字符串格式错误 。如您所见,使用JDK Ciphers是一项繁琐的任务 。这些技术很久以前曾经是Java API的标准,但是时代已经改变,我们希望有一种更简单的方法 。
Shiro试图通过引入其CipherService API简化整个密码算法的概念 。
大多数开发人员在保护数据时都希望使用CipherService:一种简单,无状态,线程安全的API,可以在一个方法调用中完整地加密或解密数据 。您所需要做的就是提供密钥,然后可以根据需要加密或解密 。
例如,可以使用256位AES加密,如下面的清单13所示 。

  • Listing 13. Apache Shiro’s Encryption API
AesCipherService cipherService = new AesCipherService();cipherService.setKeySize(256);//create a test key:byte[] testKey = cipherService.generateNewKey();//encrypt a file’s bytes:byte[] encrypted =    cipherService.encrypt(fileBytes, testKey);与JDK的Cipher API相比,Shiro示例更简单:
  • 您可以直接实例化CipherService-没有奇怪或令人困惑的工厂方法 。
  • 密码配置选项表示为与JavaBeans兼容的getter和setter-没有奇怪且难以理解的“转换字符串” 。
  • 加密和解密在单个方法调用中执行 。
  • 没有强制检查的异常 。如果需要,请捕获Shiro的CryptoException 。
Shiro的CipherService API还有其他好处,例如既支持基于字节数组的加密/解密(称为“块”操作),又支持基于流的加密/解密(例如,加密音频或视频) 。
Java密码术不必太痛苦 。
Shiro的密码学支持旨在简化您保护数据安全的工作 。
web 支持最后但并非最不重要的一点,我们将简要介绍Shiro的 web 支持 。
Shiro随附了强大的Web支持模块,以帮助保护Web应用程序 。
为Web应用程序设置Shiro很简单 。唯一需要做的就是在web.xml中定义一个Shiro Servlet过滤器 。
清单14显示了此代码 。
  • Listing 14. ShiroFilter in web.xml
<filter>    <filter-name>ShiroFilter</filter-name>    <filter-class>        org.apache.shiro.web.servlet.IniShiroFilter    </filter-class>    <!-- no init-param means load the INI config        from classpath:shiro.ini --> </filter><filter-mApping>     <filter-name>ShiroFilter</filter-name>     <url-pattern>/*</url-pattern></filter-mapping>该过滤器可以读取上述的shiro.ini配置,因此无论部署环境如何,您都可以获得一致的配置体验 。
配置完成后,Shiro筛选器将筛选每个请求,并确保在请求期间可访问特定于请求的主题 。
并且因为它过滤了每个请求,所以您可以执行特定于安全性的逻辑,以确保仅允许满足特定条件的请求通过 。
URL特定的过滤器链Shiro通过其创新的URL过滤器链接功能支持特定于安全性的过滤器规则 。
它允许您为任何匹配的URL模式指定临时过滤器链 。
这意味着您在使用Shiro的过滤机制执行安全规则(或规则组合)方面具有很大的灵活性-比仅在web.xml中定义过滤器要强得多 。
清单15显示了Shiro INI中的配置代码段 。


推荐阅读