第一步:进入eclipse新建一个名为shiro的maven工程

第二步:修改shiro工程的编码为utf-8
第三步:加入pom中的内容
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
第四步:在src/main/resources新建一个abc目录,再在这个目录下新建一个shiro.ini文件,内容如下:

#注意:在这里不能写[users]标签,因为你在users标签中写入了账号密码后,测试程序它会先与users标签中的账号密码相比对,那么下面的realm就不起作用了。

#声明一个 realm 
myRealm1=com.github.zhangkaitao.shiro.chapter2.realm.MyRealm1 
#指定 securityManager 的 realms 实现
securityManager.realms=$myRealm1
第五步:在src/main/java/新建一个shiro包,包中新建一个MyRealm1类,这个类要使用Realm接口,代码如下:
package shiro;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.realm.Realm;
public class MyRealm1 implements Realm {
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()); 
}
public String getName() {
return "myrealm1";
}
public boolean supports(AuthenticationToken arg0) {
return arg0 instanceof UsernamePasswordToken;
}
}

第六步:在src/test/java下新建一个test包,再在这个包下新建一个MyTest类,类中建一个测试函数testHelloworld(),内容如下:
package test;
import junit.framework.Assert;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.junit.Test;
public class MyTest {
@Test 
public void testHelloworld() {
// 1、获取 SecurityManager 工厂,此处使用 Ini 配置文件初始化 SecurityManager
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory(
"classpath:abc/shiro-realm.ini");
// 2、得到 SecurityManager 实例 并绑定给 SecurityUtils
org.apache.shiro.mgt.SecurityManager securityManager = factory
.getInstance();
SecurityUtils.setSecurityManager(securityManager);
// 3、得到 Subject 及创建用户名/密码身份验证 Token(即用户身份/凭证)
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123");
try {
// 4、登录,即身份验证
subject.login(token);
} catch (AuthenticationException e) {
// 5、身份验证失败
}
Assert.assertEquals(true, subject.isAuthenticated()); // 断言用户已经登录
// 6、退出
subject.logout();
}
}
第七步:Run As 选junit运行。
完毕

shiro第二讲 单Realm实例相关推荐

  1. shiro第一讲 没有Realm的实例

     第一步:进入eclipse新建一个shiro的maven工程 第二步:修改shiro工程的编码为utf-8 第三步:加入pom中的内容 <dependencies> <depe ...

  2. 第二讲 html5 框架+Crosswalk 打包 app 以及 Angularjs 基础

     第二讲 html5框架+Crosswalk 打包 app 以及 Angularjs 基础(初步认识了解 Angularjs)   学习要点: 1. html5 框架+Crosswalk 打包 a ...

  3. 权限控制框架Shiro简单介绍及配置实例

    Shiro是什么 Apache Shiro是一个非常易用的Java安全框架它能提供验证.授权.加密和Session控制.Shiro非常轻量级而且API也非常易于理解可以使用Shiro完成从APP到企业 ...

  4. Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO

    Java基础知识第二讲(Java编程规范/JVM/集合框架/异常体系/Java反射/语法知识/Java IO/码出高效) 分享在java学习及工作中,常使用的一些基础知识,本文从JVM出发,讲解了JV ...

  5. 第二讲 html5框架+Crosswalk打包app 以及 Angularjs 基础(初步认识了解Angularjs)

    第二讲 html5框架+Crosswalk打包app 以及 Angularjs 基 础(初步认识了解Angularjs) 学习要点: 1. html5框架+Crosswalk打包app 2. 什么是a ...

  6. MIT自然语言处理第二讲:单词计数(第三、四部分)

    MIT自然语言处理第二讲:单词计数(第三部分) 自然语言处理:单词计数 Natural Language Processing: (Simple) Word Counting 作者:Regina Ba ...

  7. MIT自然语言处理第二讲:单词计数(第一、二部分)

    MIT自然语言处理第二讲:单词计数(第一部分) 自然语言处理:单词计数 Natural Language Processing: (Simple) Word Counting 作者:Regina Ba ...

  8. 第八课-第二讲 08_02_bash脚本编程之七 case语句及脚本选项进阶

    第八课-第二讲 08_02_bash脚本编程之七 case语句及脚本选项进阶 一. 面向过程 控制结构 顺序结构 选择结构 循环结构 选择结构 if语句 单分支,双分支,多分支 case 语句 cas ...

  9. ios realm 文件_关于ios:具有后台进程的Realm实例会丢失数据

    我将Realm for Swift与仅内存配置一起使用. 由于在后台线程中更新数据库,因此每次使用时都会创建一个Realm实例. 在Realm文档中提到了此问题,这里还有另一个问题https://st ...

最新文章

  1. OpenCv Java Mat的基本使用-行列式计算(6)
  2. c3p0数据源配置抛出Could not load driverClass com.mysql.jdbc.Driver的解决方案
  3. 天翼云从业认证课后习题(第一章和第二章)
  4. 基于 abp vNext 和 .NET Core 开发博客项目 - 定时任务最佳实战(一)
  5. halcon write_ocr_class_svm 将OCR分类器写入文件
  6. moxy json介绍_通过MOXy实现使您的JAXB更清洁
  7. 放在请求头目的_YSLOW性能测试前端调优23大规则(三)添加Expires头
  8. 《HTML5 Canvas游戏开发实战》——3.3 自定义画板
  9. 吴恩达深度学习教程及资料
  10. 前后端分离前端框架的主要内容是什么?
  11. 基频和倍频的概念_小知识:关于倍频程
  12. 现在的媒体时兴“毁人不倦”?
  13. 603. 连续空余座位
  14. 2021年十大数据分析工具排行榜出炉
  15. nuxt 设置路由的meta属性,nuxt 怎么设置路由的meta,nuxt 怎么设置router的meta
  16. 12个球和一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球,13个呢
  17. xml文件的注释展示
  18. css 获取第N个子元素
  19. Teradata使用笔记(2)--数据库操作
  20. 树形结构——JAVA实现

热门文章

  1. 三国杀军争java_三国杀军争这八个武将上场就能赢,不管你是什么身份只要选他们!...
  2. 2020春招中软融鑫软件开发工程师面经
  3. ITPUB名人堂第37期:大型金融机构数据架构师刘盛带你体验大数据冰与火
  4. linux节点间拷贝文件命令
  5. Altova MapForce数据映射工具
  6. 利用 Windows 动态锁实现自动锁屏
  7. sql查询数据库注释(表及表注释,字段及字段注释)
  8. mysql授权远程登录
  9. FANUC机器人SYST-212报警PAUSE.G需要应用DCS参数的解决办法
  10. java毕业设计如家快捷酒店管理系统的设计与应用+黄河科技学院源码+lw文档+mybatis+系统+mysql数据库+调试