第四讲 自定义Realm来实现身份认证
2024-08-25 03:39:26
1、jdbcReam已经实现了从数据库中获取用户的验证信息,但是jdbcRealm灵活性太差。如果要实现自己的一些特殊应用时,将不能支持。这时,可以通过自定义Realm来实现身份的认证功能。
2、Realm是一个接口,在接口中定义了根据token获得认证信息的方法。Shiro内容实现了一系列的realm。这些不同的Realm实现类提供了不同的功能。AuthenticatingRealm实现了获取身份信息的功能。AuthorizingRealm实现了获取权限信息的功能。通常自定义Realm需要继承AuthorizingRealm,这样既可以提供身份认证的自定义方法,也可以实现授权的自定义方法。
3、实现自定义Realm
package com.sun123.realm; import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection; public class UserRealm extends AuthorizingRealm { /**
* 自定义realm的实现 该realm类提供了两个方法
* doGetAuthorizationInfo 获取认证信息
* doGetAuthenticationInfo 获取权限信息
*/
@Override
public String getName() {
// 自定义
return "userRealm";
} // 完成身份认证,并且返回认证信息
// 如果身份认证失败,返回null
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
// 获取用户输入的用户名
String username = (String) token.getPrincipal();// 获取身份信息
System.out.println("username:" + username);
// 根据用户名到数据库查询密码信息——模拟
// 假定从数据库获取的密码为1111
String pwd = "1111";
// 将从数据库中查询的信息封装到SimpleAuthenticationInfo中
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username, pwd, getName());
return info;
} // 授权的信息
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
// TODO Auto-generated method stub
return null;
} }
注意:使用shiro来完成权限管理,shiro并不会去维护数据。Shiro中使用的数据,需要程序员根据处理业务将数据传递给shiro相应的接口。
shiro.ini
[main]
#自定义
userRealm=com.sun123.realm.UserRealm
securityManager.realm=$userRealm
最新文章
- 提升你的开发效率,10 个 NPM 使用技巧
- 操作系统 页面置换算法LRU和FIFO
- php strtotime函数服务器和本地不相同
- 玩死人不偿命的CLOUDSTACK
- C++ 载入dll
- GCJ Round 1C 2009 Problem C. Bribe the Prisoners
- 解决VS2015 VBCSCompiler.exe 占用CPU100%的问题
- PHP填补数字前后的0
- 英语学习app案列分析
- iOS开发-AFNetworking参数和多文件同时上传【多文件上传】
- 错误代码: 1248 Every derived table must have its own alias
- jquery获取选中的文本和值
- 使用代码的方式给EntityFramework edmx 创建连接字符串
- anylogic 使用
- Alpha 事后诸葛亮(团队)
- 解决Xshell不从22端口连接服务器
- B. Divisor Subtraction
- Java SE之初探反射机制
- Java字符串转16 进制工具类Hex.java
- php 一维数组去重
热门文章
- ASCII 、UTF-8、Unicode编码
- Git 使用的问题总结
- docker安装禅道
- 你的MySQL服务器开启SSL了吗?(转载)
- PHP CGI
- vue 通过绑定事件获取当前行的id
- 小白的git克隆流程clone
- Spring Data JPA开发中遇到的问题1:org.hibernate.hql.internal.ast.QuerySyntaxException: DispatchShift is not mapped
- qbzt day3 下午(好难)
- master-slave replication