shiro学习(5):ini文件和自定义realm

工具idea

首先创建maven项目

配置文件

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>geyaoshiro</groupId><artifactId>geyaoshiro</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>geyaoshiro Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.2.3</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.6.1</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.6.1</version></dependency></dependencies><build><finalName>geyaoshiro</finalName><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version></plugin><!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></pluginManagement></build>
</project>

首先看一下目录

上面已经解决了相关的依赖

配置文件

shiro.ini

[users]
zhang=123456,admin
test=123456,test[roles]
admin=*
test=search,add,update

建立一个shirotest类

package com.geyao.shiro.test;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.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;public class ShiroTest {public static void main(String[] args) {// 1、获取SecurityManager工厂,此处使用Ini配置文件初始化SecurityManagerFactory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shiro.ini");// 2、得到SecurityManager实例 并绑定给SecurityUtilsSecurityManager securityManager = factory.getInstance();SecurityUtils.setSecurityManager(securityManager);// 3、得到Subject及创建用户名/密码身份验证Token(即用户身份/凭证)Subject subject = SecurityUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123");//UsernamePasswordToken token2 = new UsernamePasswordToken("password", "wei");try {// 4、登录,即身份验证subject.login(token);if(subject.hasRole("admin")){System.out.println("有admin角色");}else{System.out.println("没有admin角色");}if(subject.isPermitted("del")){System.out.println("有delete权限");}else{System.out.println("没有delete权限");}//subject.login(token2);} catch (AuthenticationException e) {e.printStackTrace();System.out.println("登录失败 ");// 5、身份验证失败}// 6、退出subject.logout();}
}

建立一个MyRealm类

package com.geyao.shiro.test;import org.apache.shiro.authc.*;
import org.apache.shiro.realm.Realm;public class MyRealm implements Realm {@Overridepublic String getName() {return "myrealm";}@Overridepublic boolean supports(AuthenticationToken authenticationToken) {//只支持Usernamepasswordtolkenreturn authenticationToken instanceof UsernamePasswordToken;}@Overridepublic AuthenticationInfo getAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {String username=(String)authenticationToken.getPrincipal();String password=new  String((char[]) authenticationToken.getCredentials());if(!"test".equals(username)){throw new UnknownAccountException();}if(!"123456".equals(password)){throw  new  IncorrectCredentialsException();}return new SimpleAuthenticationInfo(username,password,getName());}
}

shiroiniTest类

package com.geyao.shiro.test;import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy;
import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
import org.apache.shiro.authz.ModularRealmAuthorizer;
import org.apache.shiro.authz.permission.WildcardPermissionResolver;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;public class ShiroIniTest {public static void main(String[] args){DefaultSecurityManager securityManager =new DefaultSecurityManager();ModularRealmAuthenticator authenticator=new ModularRealmAuthenticator();authenticator.setAuthenticationStrategy(new AtLeastOneSuccessfulStrategy());securityManager.setAuthenticator(authenticator);ModularRealmAuthorizer authorizer = new ModularRealmAuthorizer();authorizer.setPermissionResolver(new WildcardPermissionResolver());securityManager.setAuthorizer(authorizer);securityManager.setRealm(new MyRealm());SecurityUtils.setSecurityManager(securityManager);Subject subject = SecurityUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken("test", "123456");//UsernamePasswordToken token2 = new UsernamePasswordToken("password", "wei");try {// 4、登录,即身份验证subject.login(token);System.out.println("登录密码成功");}catch (AuthenticationException e){e.printStackTrace();System.out.println("登录密码失败");}}
}

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于python中带下划线的变量和函数 的意义

转载:https://www.cnblogs.com/wangshuyi/p/6096362.html总结:变量:1. 前带_的变量: 标明是一个私有变量, 只用于标明, 外部类还是可以访问到这个变量2. 前带两个_ ,后带两个_ 的变量: 标明是内置变量,3. 大写加下划线的变量: 标明是 不会发生改变的全局变量函数:1. 前带…

歌谣对自己的“自勉“

前言 为什么突然想写一篇文章呢&#xff0c;可能是源于个人吧&#xff0c;每天睡觉前都会思考一下是否达到了以后想要的生活。很显然答案是没有&#xff0c;不然我现在也不和大家在一起侃侃而谈。讲真&#xff08;这是我室友经常说的一句话&#xff09;&#xff0c;我是参与安…

你的心事我全知晓——心情日记小程序丨实战

闲暇之余&#xff0c;听媳妇嘀咕说要给她做一个能表达她每日心情的小程序&#xff0c;只能她在上面发东西。既然媳妇发话了&#xff0c;就花点心思做一个吧&#xff0c;因为没有UI图&#xff0c;所有布局全靠自己瞎编&#xff0c;下面结合图片和代码跟大家讲解下实现过程&#…

spark on yarn 部署问题

spark on yarn 部署报:java.io.IOException: Resource file:/usr/local/spark-1.6.3-bin-hadoop2.6/lib/spark-assembly-1.6.3-hadoop2.6.0.jar changed on src filesystem (expected 1530607524000, was 1478125561000 解决&#xff1a;spark-env.sh 之前配置 export HADOOP_C…

java面试题29 牛客 以下关于集合类ArrayList、LinkedList、HashMap描述

java面试题29 牛客 以下关于集合类ArrayList、LinkedList、HashMap描述错误的是&#xff08;&#xff09; A HashMap实现Map接口&#xff0c;它允许任何类型的键和值对象&#xff0c;并允许将null用作键或值 B ArrayList和LinkedList均实现了List接口 C 添加和删除元素时&am…

使用python爬取东方财富网机构调研数据

最近有一个需求,需要爬取东方财富网的机构调研数据.数据所在的网页地址为: 机构调研 网页如下所示: 可见数据共有8464页,此处不能直接使用scrapy爬虫进行爬取,因为点击下一页时,浏览器只是发起了javascript网络访问,然后将服务器返回的数据插入网页,无法通过网址直接获取对应页…

spark on yarn webUI logs不能查看

执行spark on yarn 执行&#xff1a;./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster --executor-memory 1G --num-executors 3 ./lib/spark-examples-1.6.3-hadoop2.6.0.jar 10 命令执行成功后在yarn 资源管理界面查看不了logs 参考博…

java面试题30:牛客 下列哪项不属于jdk1.6垃圾收集器?

java面试题30&#xff1a;牛客 下列哪项不属于jdk1.6垃圾收集器&#xff1f; A:Serial收集器 B&#xff1a;parNew收集器 C:CMS收集器 D:G1收集器 1.Serial收集器 单线程收集器&#xff0c;收集时会暂停所有工作线程&#xff08;我们将这件事情称之为Stop The World&…

Silverlight专题(15) - 你自己的视频播放器之自定义MoveToPointSlider

前言&#xff1a; 这几天在网络上看到不少人在问如何创建一个Video Player&#xff08;Silverlight版本&#xff09; 而我在微软和这方面打了不少交道 所以计划用两篇文章解答下大家的问题 本篇文章先介绍下如何创建一个自定义的滚动条 下篇文章创建完整的一个Video Player 问题…

hive 多用户访问模注意问题

首先是安装mysql 安装mysql数据库及客户端 yum install mysql-server yum install mysql servicemysqld start步骤一&#xff1a; yum -y install mysql-server步骤二&#xff1a;service mysqld start步骤三&#xff1a;mysql -u root -p  Enter password: &#xff08;默认…

10行代码实现小程序支付功能!丨实战

前面给大家讲过一个借助小程序云开发实现微信支付的&#xff0c;但是那个操作稍微有点繁琐&#xff0c;并且还会经常出现问题&#xff0c;今天就给大家讲一个简单的&#xff0c;并且借助官方支付api实现小程序支付功能。 传送门&#xff1a;借助小程序云开发实现小程序支付功能…

ASP.NET站点导航(五)

理解并扩展 ASP.NET 2.0 中的站点导航系统 http://msdn.microsoft.com/zh-cn/library/aa479338.aspx 发布日期 : 2006-3-15 | 更新日期 : 2006-3-15David Gristwood Developer & Platform Group, Microsoft 适用于&#xff1a; Microsoft ASP.NET 2.0 (Beta 2) 摘要&#…

java面试题32:Java网络程序设计中,下列正确的描述是()

java面试题32&#xff1a;Java网络程序设计中,下列正确的描述是&#xff08;&#xff09; A&#xff1a;Java网络编程API建立在Socket基础之上 B:Java网络接口只支持tcP以及其上层协议 C&#xff1a;Java网络接口只支持UDP以及其上层协议 D:Java网络接口支持IP以上的所有高…

【收藏】C# WinForm开发系列 - DataGridView 使用方法集锦 - 宁波.Net技术讨论区

1.DataGridView实现课程表 testcontrol.rar 2.DataGridView二维表头及单元格合并 DataGridView单元格合并和二维表头.rar myMultiColHeaderDgv.rar 3.DataGridView单元格显示GIF图片 gifanimationindatagrid.rar 4.自定义显示DataGridView列(行头显示行号与图标,同一单元格显示…

Java中Map, List, Set和Queue的区别和使用场景

转&#xff1a;https://blog.csdn.net/kingcat666/article/details/75579632 1. Java集合类基本概念 在编程中&#xff0c;常常需要集中存放多个数据。从传统意义上讲&#xff0c;数组是我们的一个很好的选择&#xff0c;前提是我们事先已经明确知道我们将要保存的对象的数量…

Proxy server 緩存 jsp html

如果服務器端使用Proxy server,jsp頁面會出現頁面混亂的問題.(不同用戶登陸,出現的是同一個用戶的資料),為了避免這種情況存在,可以有兩種方法解決. eg: menu 所在頁面為toppanel.jsp,鏈接就為:http://localhost:8080/q/toppanel.jsp. 這樣user登陸可能會出現manager的menu,man…

shiro学习(6):shiro连接数据库

首先我们先看一下数据库 再看看数据库的测试数据 在我们创建好的maven项目中看一下目录结构 在pom.xml引入 <dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency&g…

【js监听报错】页面监听js报错问题

<html> <head> <script type"text/javascript">// 页面监听js报错问题 οnerrοrhandleErrvar txt"" function handleErr(msg,url,l) { txt"本页中存在错误如下&#xff1a;\n\n" txt"错误&#xff1a;" msg &quo…

链表逆序(JAVA实现)

题目&#xff1a;将一个有链表头的单向单链表逆序 分析&#xff1a; 链表为空或只有一个元素直接返回&#xff1b;设置两个前后相邻的指针p,q&#xff0c;使得p指向的节点为q指向的节点的后继&#xff1b;重复步骤2&#xff0c;直到q为空&#xff1b;调整链表头和链表尾&…

【微信网页直接下载app】微信跳转-微信浏览器中直接唤起本地浏览器和App

文档传送门&#xff1a;https://github.com/EthanOrange/wechat-redirectdemo&#xff1a; http://wxredirect.jslab.fun/call-app 转载于:https://www.cnblogs.com/xiaohuizhang/p/11377553.html