简单地说一下shiro四个基本核心功能:
Authentication(认证)
过程可以分为三步:
1、Collect the user’s identifying information, calledprincipals, and supporting proof of identity, calledcredentials.(收集用户的标识信息,被称为主体,并支持身份证明,称为凭证。)
2、Submit the principals and credentials to the system.(向系统提交主体和凭证。)
3、If the submitted credentials match what the system expects for that user identity (principal), the user is considered authenticated. If they don’t match, the user is not considered authenticated.(如果提交的凭证与系统期望的用户标识(主体)匹配,那么用户就被认为是经过身份验证的。如果它们不匹配,则用户不被认为是经过身份验证的。)
Subject subject = SecurityUtils.getSubject();
AuthenticationToken authenticationToken = new MyUsernamePasswordToken(userName, password, verifyCode, rememberMe);
public String login() {
try/catch
}
Authentication(认证)之后,用户可以进入系统,但是,能做哪些操作呢?具体的就需要进一步判断。
Authorization(授权):
可以分为role(角色)与permission(权限)验证:
role check:
if ( subject.hasRole(“administrator”) ) {
//show the ‘Create User’ button
} else {
//grey-out the button?
}
permission check:
if ( subject.isPermitted(“user:create”) ) {
//show the ‘Create User’ button
} else {
//grey-out the button?
}
role(角色)验证,在运行时不能添加或者删除。permission(权限)验证更加灵活,具有更细粒度,自己需要什么可以写什么。
Session Management(会话管理):
shiro 的session(会话)是独立于容器的,也就是说,不再需要专门的servlet与EJB容器了。对于企业缓存(enterprise caches)、关系数据库(relational databases)、NoSQL等可以一次性配置会话集群,不需要根据部署应用程序的方式重新配置应用程序。
Session session = subject.getSession();
Cryptography(加密):
简化利用JDK的密码支持使得数据混淆加密。使用的是hash(哈希)与ciphers(密码)。
之前使用MD5的加密方式如下:
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.digest(bytes);
byte[] hashed = md.digest();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
使用shiro之后:
String hex = new Md5Hash(myFile).toHex();
怎么样?简单了太多了吧,一句话就搞定了。简单粗暴,代码也更优雅。
使用256-bit AES加密,shiro下代码如下:
AesCipherService cipherService = new AesCipherService();
cipherService.setKeySize(256);
推荐微信公众号【排骨肉段】,记录日常的美好。