Apache Shiro 使用手册(四)Realm 实现
Apache 实现 shiro 使用手册 realm
2023-09-27 14:23:19 时间
在认证、授权内部实现机制中都有提到,最终处理都将交给Real进行处理。因为在Shiro中,最终是通过Realm来获取应用程序中的用户、角色及权限信息的。通常情况下,在Realm中会直接从我们的数据源中获取Shiro需要的验证信息。可以说,Realm是专用于安全框架的DAO。
一、认证实现
正如前文所提到的,Shiro的认证过程最终会交由Realm执行,这时会调用Realm的getAuthenticationInfo(token)方法。
该方法主要执行以下操作:
1、检查提交的进行认证的令牌信息
2、根据令牌信息从数据源(通常为数据库)中获取用户信息
3、对用户信息进行匹配验证
4、验证通过将返回一个封装了用户信息的AuthenticationInfo实例
5、验证失败则抛出AuthenticationException异常信息
而在我们的应用程序中要做的就是自定义一个Realm类,继承AuthorizingRealm抽象类,重载doGetAuthenticationInfo (),重写获取用户信息的方法。
二、授权实现
而授权实现则与认证实现非常相似,在我们自定义的Realm中,重载doGetAuthorizationInfo()方法,重写获取用户权限的方法即可。
一、认证实现
正如前文所提到的,Shiro的认证过程最终会交由Realm执行,这时会调用Realm的getAuthenticationInfo(token)方法。
该方法主要执行以下操作:
1、检查提交的进行认证的令牌信息
2、根据令牌信息从数据源(通常为数据库)中获取用户信息
3、对用户信息进行匹配验证
4、验证通过将返回一个封装了用户信息的AuthenticationInfo实例
5、验证失败则抛出AuthenticationException异常信息
而在我们的应用程序中要做的就是自定义一个Realm类,继承AuthorizingRealm抽象类,重载doGetAuthenticationInfo (),重写获取用户信息的方法。
- protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
- UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
- User user = accountManager.findUserByUserName(token.getUsername());
- if (user != null) {
- return new SimpleAuthenticationInfo(user.getUserName(), user.getPassword(), getName());
- } else {
- return null;
- }
- }
二、授权实现
而授权实现则与认证实现非常相似,在我们自定义的Realm中,重载doGetAuthorizationInfo()方法,重写获取用户权限的方法即可。
- protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
- String userName = (String) principals.fromRealm(getName()).iterator().next();
- User user = accountManager.findUserByUserName(userName);
- if (user != null) {
- SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
- for (Group group : user.getGroupList()) {
- info.addStringPermissions(group.getPermissionList());
- }
- return info;
- } else {
- return null;
- }
- }
相关文章
- java代理使用 apache ant实现文件压缩/解压缩
- Apache Spark机器学习3.2 整体视图的方法
- org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apach
- Apache Maven实现不同环境差异化编译和配置
- docker上java进程假死(线程blocked),org.apache.logging.log4j.core.layout.TextEncoderHelper.copyDataToDesti...
- CentOS7:搭建SVN + Apache 服务器
- Nginx 笔记与总结(15)nginx 实现反向代理 ( nginx + apache 动静分离)
- Apache + Tomcat +mod_jk实现集群服务
- Apache生产配置
- 《PHP、MySQL和Apache入门经典(第5版)》一第2章 安装和配置MySQL2.1 MySQL的当前版本和未来版本
- 基于 PHP+apache+MySql实现(Web)客户关系管理系统【100010108】
- Hive启动报错 java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang
- 使用Apache的DigestUtils类实现哈希摘要(SHA/MD5)
- 转 Apache Ant 实现自动化部署
- Apache NiFi之Kafka流数据到HBase
- 【Apache RocketMQ】RocketMQ捐赠给Apache那些鲜为人知的故事-转自阿里中间件
- 社区资讯 | Apache Flink 中文社区网站 Ververica 正式发布
- Apache James搭建内网邮件服务器
- apache开源项目-- OODT
- Apache Kafka: 优化部署的10个最佳实践