【原】Shiro框架基础搭建[2]
简介:
关于搭建一个最基础的shiro网上的例子有很多,这里是记录一下自己尝试去看官方文档所搭建的一个小demo,项目采用的是原始的java静态工程,导入相关jar包后就能运行。
首先进入官网http://shiro.apache.org/,开头便是介绍shiro的一个英文描述如下:

Apache Shiro™是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序——从最小的移动应用程序最大的网络和企业应用程序

新建后的项目结构如上图所示 ;shiro.ini是shiro项目的核心配置文件(主要存放一些shiro权限配置);其中必须加入lo4j日志包,因为shiro依赖它们,如果缺少包则抛出异常。
下面贴上整段代码,基本都是从官网的demo上复制下来进行了修改,其中只是测试部分方法,还有很多方法没有测试(Shiro API: http://shiro.apache.org/static/1.3.2/apidocs/org/apache/shiro/subject/Subject.html)
package com.first.shiro; import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory; public class Quickstart { public static void main(String[] args) { //加载配置文件
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); //获取实例
org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance(); //设置安全管理器
SecurityUtils.setSecurityManager(securityManager); //获得当前执行主体
Subject cuSubject = SecurityUtils.getSubject(); //返回与这一主题相关联的应用程序会话。
Session session = cuSubject.getSession(); session.setAttribute("dada", "ddddddd"); String value = (String) session.getAttribute("dada"); if(value.equals("ddddddd")){
System.out.println("yyy");
} System.out.println("登录前:" + cuSubject.hasRole("admin")); //返回true,如果这个话题/用户证明自己的身份在当前会话提供有效身份证件匹配那些已知的系统,否则假。
if(!cuSubject.isAuthenticated()){ //这里进行用户名和密码验证,root 是用户名 ,123是密码,这里对应shiro.ini配置文件的用户名和密码
UsernamePasswordToken token = new UsernamePasswordToken("root","123"); //是否记住我,类似于浏览器的是否记住cookie
token.setRememberMe(true); try{
//登录,如果信息正确则登录OK,否则的则会进入下面捕获的异常
cuSubject.login(token);
}catch(UnknownAccountException use){
//未知用户,说明配置文件里没有当前登录用户
System.out.println("no user is find....");
}catch(IncorrectCredentialsException pwderror){
//密码错误
System.out.println("pwd is error ....");
} //验证用户是否拥有admin角色
System.out.println(cuSubject.hasRole("admin")); //用户是否有权限执行当前动作
if(cuSubject.isPermitted("user:delete:zhangsans")){
System.out.println("yes,you can do anything");
}else{
System.out.println("no permitted");
} }
//System.out.println("---->User" + cuSubject.getPrincipal()); } }
下面是shiro.ini的配置文件,贴上去方便以后回顾对比,而不用反复打开ide去找代码
[users]
root = 123, admin, goodguy
zdd = zdd, admin, goodguy
[roles]
#admin = *
goodguy = user:delete:zhangsan*
【原】Shiro框架基础搭建[2]的更多相关文章
- shiro框架基础
一.shiro框架简介 Apache Shiro是Java的一个安全框架.其内部架构如下: 下面来介绍下里面的几个重要类: Subject:主体,应用代码直接交互的对象就是Subject.代表了当前用 ...
- ssm框架基础搭建
1项目搭建环境 windows10+eclipse4.8+tomcat7+jdk1.7 2.使用maven搭建 1)首先eclipse配置好maven环境 2)file--new--other 3) ...
- python之scrapy框架基础搭建
一.创建工程 #在命令行输入scrapy startproject xxx #创建项目 二.写item文件 #写需要爬取的字段名称 name = scrapy.Field() #例 三.进入spide ...
- 【原】Spring整合Shiro基础搭建[3]
1.前言 上个Shiro Demo基础搭建是基于官方的快速入门版本,没有集成其他框架,只是简单的通过Main方法来执行Shiro工作流程,并测试一下比较核心的函数:但在企业开发中一般都会集成Sprin ...
- iOS基础框架的搭建/国际化操作
1.基础框架的搭建 1.1 pod引入常用的第三方类库 1.2 创建基础文件夹结构/目录结构 Resource———存放声音/图片/xib/storyboard 等资源文件 Define——宏定义, ...
- iOS基础框架的搭建 / 及国际化操作
1.基础框架的搭建 1.1 pod引入常用的第三方类库 1.2 创建基础文件夹结构/目录结构 Resource———存放声音/图片/xib/storyboard 等资源文件 Define——宏定义, ...
- Shiro框架 - 【shiro基础知识】
转载:https://segmentfault.com/a/1190000013875092#articleHeader27 读完需要 63 分钟 前言 本文主要讲解的知识点有以下: 权限管理 ...
- Hibernatel框架基础使用
Hibernatel框架基础使用 1.简介 1.1.Hibernate框架由来 Struts:基于MVC模式的应用层框架技术 Hibernate:基于持久层的框架(数据访问层使用)! Spring:创 ...
- 基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建
基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建 前言 最近做回后台开发,重新抓起以前学过的SSM(Spring+Sp ...
随机推荐
- 博客迁址 xpeng.scorpionstudio.com
这里不再更新!现在博客的正式地址是: http://xpeng.scorpionstudio.com
- PageAdmin CMS网站建设教程:如何实现信息的定时发布
PageAdmin Cms发布文章时候有一个上线时间设置和下线时间设置,网站编辑人员可以利用这个功能来实现定时发布,在信息发布界面,如下图: 设置后就会自动加入定时任务中,注意这个功能需要再系统设置& ...
- Day14 作业
1,整理今天的博客,写课上代码,整理流程图. 2,用列表推导式做下列小题 (1) 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母 (2) 求(x,y)其中x是0-5之间的偶数,y是0- ...
- linux 中定时执行python脚本
一.让Python随Linux开机自动运行 准备好要自启的脚本auto.py 用root权限编辑以下文件 sudo vim /ect/rc.local 在exit 0上面编辑启动脚本的命令(编辑rc. ...
- 加快mysql导入导出速度
MySQL导出的SQL语句在处理百万级数据的时候,可能导入要花几小时.在导出时合理使用几个参数,可以大大加快导入的速度. -e 使用包括几个VALUES列表的多行INSERT语法; --max_all ...
- Python爬虫之Cookie和Session
关于cookie和session估计很多程序员面试的时候都会被问到,这两个概念在写web以及爬虫中都会涉及,并且两者可能很多人直接回答也不好说的特别清楚,所以整理这样一篇文章,也帮助自己加深理解 什么 ...
- python求100以内素数
python求100以内素数之和 from math import sqrt # 使用isPrime函数 def isPrime(n): if n <= 1: return False for ...
- 【NOIP2017】 宝藏 状压dp
为啥我去年这么菜啊..... 我现在想了$20min$后打了$10min$就过了$qwq$. 我们用$f[i][j]$表示当前深度为$i$,访问了状态$j$中的所有点的最小代价. 显然$f[i][j] ...
- (转)MySQL慢查询日志总结
慢查询日志概念 原文:http://www.cnblogs.com/kerrycode/p/5593204.html MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应 ...
- JVM-调优命令
jps JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程. 命令格式: jps [options] [hostid] option参数: -l : 输出 ...