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

最新文章

  1. 提升你的开发效率,10 个 NPM 使用技巧
  2. 操作系统 页面置换算法LRU和FIFO
  3. php strtotime函数服务器和本地不相同
  4. 玩死人不偿命的CLOUDSTACK
  5. C++ 载入dll
  6. GCJ Round 1C 2009 Problem C. Bribe the Prisoners
  7. 解决VS2015 VBCSCompiler.exe 占用CPU100%的问题
  8. PHP填补数字前后的0
  9. 英语学习app案列分析
  10. iOS开发-AFNetworking参数和多文件同时上传【多文件上传】
  11. 错误代码: 1248 Every derived table must have its own alias
  12. jquery获取选中的文本和值
  13. 使用代码的方式给EntityFramework edmx 创建连接字符串
  14. anylogic 使用
  15. Alpha 事后诸葛亮(团队)
  16. 解决Xshell不从22端口连接服务器
  17. B. Divisor Subtraction
  18. Java SE之初探反射机制
  19. Java字符串转16 进制工具类Hex.java
  20. php 一维数组去重

热门文章

  1. ASCII 、UTF-8、Unicode编码
  2. Git 使用的问题总结
  3. docker安装禅道
  4. 你的MySQL服务器开启SSL了吗?(转载)
  5. PHP CGI
  6. vue 通过绑定事件获取当前行的id
  7. 小白的git克隆流程clone
  8. Spring Data JPA开发中遇到的问题1:org.hibernate.hql.internal.ast.QuerySyntaxException: DispatchShift is not mapped
  9. qbzt day3 下午(好难)
  10. master-slave replication