【原】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 ...
随机推荐
- 【cocos2d-x 仙凡奇缘-网游研发(2) 角色换线系统】
转载请注明出处:http://www.cnblogs.com/zisou/p/xianfan01.html 做一款游戏就先得制作好策划文档,和基本的人物世界构架的设计,然后架空在这样一个虚拟的世界中每 ...
- 安装 rabbitmq ,通过生成器获取redis列表数据 与 Celery 分布式异步队列
一.安装rabbitmq @全体成员 超简易安装rabbitmq文档 1.安装配置epel源rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/ ...
- python 十进制 和 IP 地址互转
#! /bin/python def ip2decimalism(ip): dec_value = 0 v_list = ip.split('.') v_list.reverse() t = 1 fo ...
- 给XCode安装Alcatraz(包管理工具)!!
Alcatraz官方描述: Alcatraz is an open-source package manager for Xcode. It lets you discover and instal ...
- 深度优先搜索 - 简单demo
输入一个数n,输出 1 ~ n 的全排列,例如输入 3,全排列则为:123,132,213,231,312,321 一共六种. 这里采用深度优先搜索来解决这个问题: #include<stdio ...
- Android逆向进阶——让你自由自在脱壳的热身运动(dex篇)
本文作者:HAI_ 0×00 前言 来看看我们今天的主题. 让你自由自在脱壳的热身运动. 现在很多第厂家都是使用第三方的加固方式来进行加固的.或者使用自己的加固方式进行加固. 那么我们必不可少的就是脱 ...
- numpy的ravel()和flatten()函数比较
功能 两个函数的功能都是将多维数组降为一维. 用法 import numpy as np arr = np.array([[1, 2],[3, 4]]) arr.flatten() arr.ravel ...
- apache2.4配置weblogic12c集群(linux环境)
首先确定环境已装apache2.4,没装的话可以看下这篇文章apache2.4一键脚本安装(linux环境) 1.下载apache分发模块mod_wl_24.so 下载apache2.4的weblog ...
- mysql 执行 sql 语句提示Parameter '@XXX' must be defined
执行 sql 语句 MySqlException: Parameter '@maxNo' must be defined. 执行 sql 中含有自定义变量 @maxNo,抛出异常 解决方法: 连接字符 ...
- 云计算平台管理的三大利器Nagios、Ganglia和Splunk
综合利用Nagios.Ganglia和Splunk搭建起的云计算平台监控体系,具备错误报警.性能调优.问题追踪和自动生成运维报表的功能.有了这套系统,就可轻松管理Hadoop/HBase云计算平台. ...