package org.zln.hello.realm;

import org.apache.shiro.authc.*;
import org.apache.shiro.realm.Realm; /**
* Created by sherry on 16/9/8.
*/
public class MyRealm01 implements Realm {
@Override
public String getName() {
return "MyRealm01";
} @Override
public boolean supports(AuthenticationToken token) {
//仅支持UsernamePasswordToken类型的 Token
return token instanceof UsernamePasswordToken;
} @Override
public AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username = (String)token.getPrincipal(); //得到用户名
String password = new String((char[])token.getCredentials()); //得到密码
if(!"zhang".equals(username)) {
throw new UnknownAccountException(); //如果用户名错误
//
}
if(!"123".equals(password)) {
throw new IncorrectCredentialsException(); //如果密码错误
}
//如果身份认证验证成功,返回一个 AuthenticationInfo 实现; return new SimpleAuthenticationInfo(username, password, getName());
}
}
#声明一个 realm
MyRealm01=org.zln.hello.realm.MyRealm01
#指定 securityManager 的 realms 实现
securityManager.realms=$MyRealm01
package org.zln.hello;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory; /**
* Created by sherry on 16/9/8.
*/
public class HelloWorld { private static Logger logger = LogManager.getLogger(HelloWorld.class); private static Subject subject; static {
//1、获取 SecurityManager 工厂,此处使用 Ini 配置文件初始化 SecurityManager
// Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-realm.ini");
//2、得到 SecurityManager 实例 并绑定给 SecurityUtils
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
//3、得到 Subject 及创建用户名/密码身份验证 Token(即用户身份/凭证)
subject = SecurityUtils.getSubject();
} public static boolean login(String username,String password){
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
//4、登录,即身份验证
try {
subject.login(token);
}catch (Exception e){
logger.info("身份验证失败");
logger.error(e.getMessage(),e);
return false;
} return subject.isAuthenticated();//是否成功登陆 } public static void main(String[] args) { //6、退出
subject.logout();
}
}

多 Realm 配置

#声明一个 realm

myRealm1=com.github.zhangkaitao.shiro.chapter2.realm.MyRealm1

myRealm2=com.github.zhangkaitao.shiro.chapter2.realm.MyRealm2

#指定 securityManager 的 realms 实现

securityManager.realms=$myRealm1,$myRealm2

securityManager 会按照 realms 指定的顺序进行身份认证。此处我们使用显示指定顺序的方 式指定了 Realm 的顺序,如果删除“securityManager.realms=$myRealm1,$myRealm2”,那 么 securityManager 会按照 realm 声明的顺序进行使用(即无需设置 realms 属性,其会自动 发现),当我们显示指定 realm 后,其他没有指定 realm 将被忽略,如 “securityManager.realms=$myRealm1”,那么 myRealm2 不会被自动设置进去。

最新文章

  1. Event,delegate,handler之间的关系
  2. css3 transition
  3. CentOS下 pycharm开发环境搭建
  4. Hibernate总结2 API和配置文件
  5. SQL Server中的索引结构与疑惑
  6. Android NDK开发
  7. iOS开发——高级技术&amp;内购服务
  8. 【STL】全排列生成算法:next_permutation
  9. [POJ 3420] Quad Tiling
  10. git 取消追踪
  11. 使用cocoapods后 三方库的头文件没有代码提示?
  12. Perl List::Util模块用法详解
  13. Vue中data返回对象和返回值的区别
  14. 记号一次更换IBM X3650M4主板后RAID无法启动的解决
  15. WPF 绑定 验证
  16. python轻量级orm
  17. Development Tools
  18. php include,require 主要是向网页中引入文件
  19. 自对齐(self-aligned)
  20. linux系统编程之管道(三):命令管道(FIFO)

热门文章

  1. Python实现trim函数
  2. oracle约束约束状态和设计习惯
  3. 构建高可靠hadoop集群之4-保全模式
  4. 使用Ansible实现nginx+keepalived高可用负载均衡自动化部署
  5. Ajax异步交互
  6. Docker 运行MySQL 5.7
  7. bootstrap-daterangepicker插件运用
  8. dynamic-insert和dynamic-update属性
  9. android 自定义图片圆形进度条
  10. 【php】php 生僻知识点认知