ApacheShiro使用手册(四)Realm实现
实现 使用手册 realm ApacheShiro
2023-06-13 09:15:28 时间
在认证、授权内部实现机制中都有提到,最终处理都将交给Real进行处理。因为在Shiro中,最终是通过Realm来获取应用程序中的用户、角色及权限信息的。通常情况下,在Realm中会直接从我们的数据源中获取Shiro需要的验证信息。可以说,Realm是专用于安全框架的DAO.
一、认证实现
正如前文所提到的,Shiro的认证过程最终会交由Realm执行,这时会调用Realm的getAuthenticationInfo(token)方法。
该方法主要执行以下操作:
1、检查提交的进行认证的令牌信息
2、根据令牌信息从数据源(通常为数据库)中获取用户信息
3、对用户信息进行匹配验证。
4、验证通过将返回一个封装了用户信息的AuthenticationInfo实例。
5、验证失败则抛出AuthenticationException异常信息。
而在我们的应用程序中要做的就是自定义一个Realm类,继承AuthorizingRealm抽象类,重载doGetAuthenticationInfo(),重写获取用户信息的方法。
protectedAuthenticationInfodoGetAuthenticationInfo(AuthenticationTokenauthcToken)throwsAuthenticationException{
UsernamePasswordTokentoken=(UsernamePasswordToken)authcToken;
Useruser=accountManager.findUserByUserName(token.getUsername());
if(user!=null){
returnnewSimpleAuthenticationInfo(user.getUserName(),user.getPassword(),getName());
}else{
returnnull;
}
}
二、授权实现
而授权实现则与认证实现非常相似,在我们自定义的Realm中,重载doGetAuthorizationInfo()方法,重写获取用户权限的方法即可。
protectedAuthorizationInfodoGetAuthorizationInfo(PrincipalCollectionprincipals){
StringuserName=(String)principals.fromRealm(getName()).iterator().next();
Useruser=accountManager.findUserByUserName(userName);
if(user!=null){
SimpleAuthorizationInfoinfo=newSimpleAuthorizationInfo();
for(Groupgroup:user.getGroupList()){
info.addStringPermissions(group.getPermissionList());
}
returninfo;
}else{
returnnull;
}
}
相关文章
- wordpress免插件实现TAG Category自动添加链接
- 实战 | 使用Spring Boot + Elasticsearch + Logstash 实现图书查询检索服务
- 数组使用SQL Server实现数组元素的遍历(sqlserver遍历)
- 使用SSH+VNC实现安全的Linux远程桌面管理
- MySQL实现跨数据库查询功能(mysql跨数据库查询)
- Redis实现高效的写入性能(redis写入性能)
- 利用Redis实现数据中转(数据中转 redis)
- 使用Oracle快速实现凭证数据导入(oracle 中凭证导入)
- 基于Redis实现读写分离的集群构架(redis读写分离 集群)
- Redis实现轻松获取所有记录数(redis获取所有记录数)
- C语言-内存函数的实现(二)之memmove
- 动态创建的表格单元格中的事件实现代码
- JavaScript空位补零实现代码
- linux下查看swap分区被哪些进程占用实现脚本
- php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
- C#Socket连接请求超时机制实现代码分享
- ThinkPHP实现带验证码的文件上传功能实例
- javascript实现window.print()去除页眉页脚