1. package org.zln.hello.realm;
  2.  
  3. import org.apache.shiro.authc.*;
  4. import org.apache.shiro.realm.Realm;
  5.  
  6. /**
  7. * Created by sherry on 16/9/8.
  8. */
  9. public class MyRealm01 implements Realm {
  10. @Override
  11. public String getName() {
  12. return "MyRealm01";
  13. }
  14.  
  15. @Override
  16. public boolean supports(AuthenticationToken token) {
  17. //仅支持UsernamePasswordToken类型的 Token
  18. return token instanceof UsernamePasswordToken;
  19. }
  20.  
  21. @Override
  22. public AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
  23. String username = (String)token.getPrincipal(); //得到用户名
  24. String password = new String((char[])token.getCredentials()); //得到密码
  25. if(!"zhang".equals(username)) {
  26. throw new UnknownAccountException(); //如果用户名错误
  27. //
  28. }
  29. if(!"123".equals(password)) {
  30. throw new IncorrectCredentialsException(); //如果密码错误
  31. }
  32. //如果身份认证验证成功,返回一个 AuthenticationInfo 实现;
  33.  
  34. return new SimpleAuthenticationInfo(username, password, getName());
  35. }
  36. }
  1. #声明一个 realm
  2. MyRealm01=org.zln.hello.realm.MyRealm01
  3. #指定 securityManager 的 realms 实现
  4. securityManager.realms=$MyRealm01
  1. package org.zln.hello;
  2.  
  3. import org.apache.log4j.LogManager;
  4. import org.apache.log4j.Logger;
  5. import org.apache.shiro.SecurityUtils;
  6. import org.apache.shiro.authc.UsernamePasswordToken;
  7. import org.apache.shiro.config.IniSecurityManagerFactory;
  8. import org.apache.shiro.mgt.SecurityManager;
  9. import org.apache.shiro.subject.Subject;
  10. import org.apache.shiro.util.Factory;
  11.  
  12. /**
  13. * Created by sherry on 16/9/8.
  14. */
  15. public class HelloWorld {
  16.  
  17. private static Logger logger = LogManager.getLogger(HelloWorld.class);
  18.  
  19. private static Subject subject;
  20.  
  21. static {
  22. //1、获取 SecurityManager 工厂,此处使用 Ini 配置文件初始化 SecurityManager
  23. // Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
  24. Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-realm.ini");
  25. //2、得到 SecurityManager 实例 并绑定给 SecurityUtils
  26. SecurityManager securityManager = factory.getInstance();
  27. SecurityUtils.setSecurityManager(securityManager);
  28. //3、得到 Subject 及创建用户名/密码身份验证 Token(即用户身份/凭证)
  29. subject = SecurityUtils.getSubject();
  30. }
  31.  
  32. public static boolean login(String username,String password){
  33. UsernamePasswordToken token = new UsernamePasswordToken(username,password);
  34. //4、登录,即身份验证
  35. try {
  36. subject.login(token);
  37. }catch (Exception e){
  38. logger.info("身份验证失败");
  39. logger.error(e.getMessage(),e);
  40. return false;
  41. }
  42.  
  43. return subject.isAuthenticated();//是否成功登陆
  44.  
  45. }
  46.  
  47. public static void main(String[] args) {
  48.  
  49. //6、退出
  50. subject.logout();
  51. }
  52. }

多 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 不会被自动设置进去。

自定义 Relam的更多相关文章

  1. shiro权限配置的细节问题&认证

    细节: ---[urls]部分配置,其格式是    url=拦截器[参数] ,拦截器[参数] ---如果当前请求的 url 匹配 [urls] 部分或者某个url模式,将会执行配置的拦截器 ---an ...

  2. Shiro+SpringBoot认证

    该博客以Web为基础 一.引入依赖 shiro-all包含shiro所有的包.shiro-core是核心包.shiro-web是与web整合.shiro-spring是与spring整合.shiro- ...

  3. 厉害啊!第一次见到把Shiro运行流程写的这么清楚的,建议收藏起来慢慢看

    前言 shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证.用户授权. spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖 ...

  4. 关于Unity3D自定义编辑器的学习

    被人物编辑器折腾了一个月,最终还是交了点成品上去(还要很多优化都还么做).  刚接手这项工作时觉得没概念,没想法,不知道.后来就去看<<Unity5.X从入门到精通>>中有关于 ...

  5. 一起学微软Power BI系列-使用技巧(5)自定义PowerBI时间日期表

    1.日期函数表作用 经常使用Excel或者PowerBI,Power Pivot做报表,时间日期是一个重要的纬度,加上做一些钻取,时间日期函数表不可避免.所以今天就给大家分享一个自定义的做日期表的方法 ...

  6. JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome

    今天为大家分享一下我自己制作的浏览器滚动条,我们知道用css来自定义滚动条也是挺好的方式,css虽然能够改变chrome浏览器的滚动条样式可以自定义,css也能够改变IE浏览器滚动条的颜色.但是css ...

  7. ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单

    前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...

  8. ASP.NET Aries 入门开发教程5:自定义列表页工具栏区

    前言: 抓紧时间,继续写教程,因为发现用户期待的内容,都在业务处理那一块. 不得不继续勤劳了. 这节主要介绍工具栏区的玩法. 工具栏的默认介绍: 工具栏默认包括5个按钮,根据不同的权限决定显示: 添加 ...

  9. UWP中实现自定义标题栏

    UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...

随机推荐

  1. springboot整合swagger笔记

    首先,在pom.xml中添加依赖 <!--swagger--> <dependency> <groupId>io.springfox</groupId> ...

  2. vue-cli中vuex IE兼容

    vue2.0 兼容ie9及其以上 vue-cli中使用vuex的项目 在IE中会出现页面空白 控制台报错的情况:我们只需要安装一个插件,然后在main.js中全局引入即可 安装 npm install ...

  3. Java中调用存储过程或函数

    //?代表一个参数,多个参数用逗号隔开 CallableStatement cs = connect.prepareCall("{?=call 存储过程名称或函数名(?)}"); ...

  4. webpack4提升180%编译速度

    前言 对于现在的前端项目而言,编译发布几乎是必需操作,有的编译只需要几秒钟,快如闪电,有的却需要10分钟,甚至更多,慢如蜗牛.特别是线上热修复时,分秒必争,响应速度直接影响了用户体验,用户不会有耐心等 ...

  5. Angular-chart.js 使用说明(基于angular.js工程)

    Angular-chart.js是基于Chart.js的angular组件,引入项目后直接操作数据即可. 引用方法:    分别将Chart.js.angular-chart.js.angular-c ...

  6. python爬取豌豆荚中的详细信息并存储到SQL Server中

    买了本书<精通Python网络爬虫>,看完了第6章,我感觉我好像可以干点什么:学的不多,其中的笔记我放到了GitHub上:https://github.com/NSGUF/PythonLe ...

  7. 2002: [Hnoi2010]Bounce 弹飞绵羊

    2002: [Hnoi2010]Bounce 弹飞绵羊 https://www.lydsy.com/JudgeOnline/problem.php?id=2002 分析: 绵羊在弹飞的路径中相当于一棵 ...

  8. No parser was explicitly specified, so I'm using the best available HTML parser for this system ("html.parser").警告解决方法

    在使用BeautifulSoup库时出现该警告,虽然不影响正常运行,但强迫症不能忍啊!! 详细警告信息如下: UserWarning: No parser was explicitly specifi ...

  9. thrift服务端到客户端开发简单示例

    (1)首先我们在服务器端写个helloworld.thrift文件,如下所示: service HelloWorld{ string ping(1: string name), string getp ...

  10. 自定义T4模板去掉实体对象中的下划线

            在EF Power Tool 默认使用的T4模板中,如果数据库表有下划线,那么生成的实体也有下划线,但是我们实际使用的过程中,是不希望有下划线的,要解决这个问题,可以自定义这个T4模板 ...