怎样让Apache Shiro保护你的应用

发布时间:2021-10-11 09:53:37 作者:柒染
来源:亿速云 阅读:99

本篇文章给大家分享的是有关怎样让Apache Shiro保护你的应用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

* authentication : 认证
* authorization : 授权
* cryptography : 密码学

一:概述

(一)What is Apache Shiro?

(二)Apache Shiro Features

怎样让Apache Shiro保护你的应用

二:核心概念:Subject,SecurityManager,Realms

(一)Subject

import org.apache.shiro.subject.Subject;
import org.apache.shiro.SecurityUtils;
...
Subject currentUser = SecurityUtils.getSubject();

(二)SecurityManager

1.Subject 的“幕后”推手是 SecurityManager

2.那么,如何设置 SecurityManager 呢?

(三)Realms

三:认证(authentication)

//1. 接受提交的当事人和证书:
AuthenticationToken token = new UsernamePasswordToken(username, password);
//2. 获取当前 Subject:
Subject currentUser = SecurityUtils.getSubject();
//3. 登录: 
currentUser.login(token);
//3. 登录:
try {
    currentUser.login(token);
} catch (IncorrectCredentialsException ice) {
    …
} catch (LockedAccountException lae) {
    …
}
…
catch (AuthenticationException ae) {…
}

四:授权(Authorization)

if ( subject.hasRole(“administrator”) ) {
    // 显示‘Create User’按钮 
} else {
    // 按钮置灰?
}
if ( subject.isPermitted(“user:create”) ) {
    // 显示‘Create User’按钮 
} else {
    // 按钮置灰?
}
if ( subject.isPermitted(“user:delete:jsmith”) ) {
    // 删除‘jsmith’用户 
} else {
    // 不删除‘jsmith’
}

小结

五:会话管理器(Session Managerment)

Session session = subject.getSession();
Session session = subject.getSession(boolean create);
Session session = subject.getSession();
session.getAttribute("key", someValue);
Date start = session.getStartTimestamp();
Date timestamp = session.getLastAccessTime();
session.setTimeout(millis);
...

六:加密(Cryptography)

(一)哈希

1.不使用Shiro,你需要如下步骤才能完成上述内容:

1)将文件转换成字节数组。
2)使用MessageDigest类对字节数组进行哈希,处理相关异常。
try {
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.digest(bytes);
    byte[] hashed = md.digest();
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
}
3)将哈希后的字节数组编码成十六进制字符。

2.使用shiro完成

String hex = new Md5Hash(myFile).toHex();
String encodedPassword = new Sha512Hash(password, salt, count).toBase64();

(二)密码

AesCipherService cipherService = new AesCipherService();
cipherService.setKeySize(256);

// 创建一个测试密钥: 
byte[] testKey = cipherService.generateNewKey();
// 加密文件的字节: 
byte[] encrypted = cipherService.encrypt(fileBytes, testKey);

七:web支持(Web Support)

(一)web.xml中的ShiroFilter

<filter>
    <filter-name>ShiroFilter</filter-name>
    <filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class>
    <!-- 没有 init-param 属性就表示从 classpath:shiro.ini 装入 INI 配置 --> 
</filter>
<filter-mapping>
    <filter-name>ShiroFilter</filter-name>
    <url-pattern>/*</url-pattern> 
</filter-mapping>

(二)URL 特定的 Filter 链

[urls]
/assets/** = anon
/user/signup = anon
/user/** = user
/rpc/rest/** = perms[rpc:invoke], authc
/** = authc

(三)JSP 标签库

<%@ taglib prefix="shiro" 
   uri="http://shiro.apache.org/tags" %>
...
<p>Hello
<shiro:user> 
    <!-- shiro:principal 打印出了 Subject 的主当事人 - 在这个示例中,就是用户名: --> 
    <shiro:principal/>!
</shiro:user>
<shiro:guest> 
    <!-- 没有登录 - 就认为是 Guest。显示注册链接: --> 
    ! <a href=”register.jsp”>Register today!</a>
</shiro:guest>
</p>

Shiro 还支持其他许多 Web 特性,如简单的“记住我”服务,REST 和 BASIC 认证。当然,如果想使用 Shiro 原生的企业会话,它还提供透明的 HttpSession 支持。参见Apache Shiro Web 文档可以了解更多内容。

(四)Web 会话管理

1.缺省 Http 会话

2.Web 层中 Shiro 的原生会话

以上就是怎样让Apache Shiro保护你的应用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. Apache Shiro 使用手册(一)Shiro架构介绍
  2. Apache Shiro在web开发安全框架中的应用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

apache shiro

上一篇:如何用Go语言异常机制模拟TryCatch异常捕捉

下一篇:如何提高PHP性能

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》