简介:


  关于搭建一个最基础的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]的更多相关文章

  1. shiro框架基础

    一.shiro框架简介 Apache Shiro是Java的一个安全框架.其内部架构如下: 下面来介绍下里面的几个重要类: Subject:主体,应用代码直接交互的对象就是Subject.代表了当前用 ...

  2. ssm框架基础搭建

    1项目搭建环境  windows10+eclipse4.8+tomcat7+jdk1.7 2.使用maven搭建 1)首先eclipse配置好maven环境 2)file--new--other 3) ...

  3. python之scrapy框架基础搭建

    一.创建工程 #在命令行输入scrapy startproject xxx #创建项目 二.写item文件 #写需要爬取的字段名称 name = scrapy.Field() #例 三.进入spide ...

  4. 【原】Spring整合Shiro基础搭建[3]

    1.前言 上个Shiro Demo基础搭建是基于官方的快速入门版本,没有集成其他框架,只是简单的通过Main方法来执行Shiro工作流程,并测试一下比较核心的函数:但在企业开发中一般都会集成Sprin ...

  5. iOS基础框架的搭建/国际化操作

    1.基础框架的搭建 1.1 pod引入常用的第三方类库 1.2 创建基础文件夹结构/目录结构 Resource———存放声音/图片/xib/storyboard 等资源文件 Define——宏定义, ...

  6. iOS基础框架的搭建 / 及国际化操作

    1.基础框架的搭建 1.1 pod引入常用的第三方类库 1.2 创建基础文件夹结构/目录结构 Resource———存放声音/图片/xib/storyboard 等资源文件 Define——宏定义, ...

  7. Shiro框架 - 【shiro基础知识】

     转载:https://segmentfault.com/a/1190000013875092#articleHeader27  读完需要 63 分钟   前言 本文主要讲解的知识点有以下: 权限管理 ...

  8. Hibernatel框架基础使用

    Hibernatel框架基础使用 1.简介 1.1.Hibernate框架由来 Struts:基于MVC模式的应用层框架技术 Hibernate:基于持久层的框架(数据访问层使用)! Spring:创 ...

  9. 基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建

    基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建 前言 最近做回后台开发,重新抓起以前学过的SSM(Spring+Sp ...

随机推荐

  1. 如何学习、了解Kubernetes?

    欢迎访问网易云社区,了解更多网易技术产品运营经验 [Kubernetes官方文档](https://kubernetes.io/docs/tutorials/)是最基本的入门教材,这里的内容是最官方, ...

  2. OSLab课堂作业2

      日期:2019/3/23 内容: 实现内容 要求 mysys.c 实现函数mysys,用于执行一个系统命令. mysys的功能与系统函数system相同,要求用进程管理相关系统调用自己实现一遍 使 ...

  3. Datetimepicker.js用法

    $('.form_date').datetimepicker({//初始化 language: 'zh-CN', //weekStart: 1, //todayBtn: 1, autoclose: 1 ...

  4. 内存耗用:VSS/RSS/PSS/USS

    Terms VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存) PSS - P ...

  5. Redis的快照

    博客链接:http://www.cnblogs.com/zhenghongxin/p/8669913.html redis 本地持久化到硬盘有两种方式,一是快照(snapshotting),二是只追加 ...

  6. 解决Navicat连接Oracle时报错ORA-28547

    1:ORA-28547 原因:navicate Primium版本的OCi和本地数据库的OCI版本不一致. 解决方法: 1:把navicate Primium版本自带oci.dll替换本地Oracle ...

  7. jzoj5848

    小 S 热爱大自然, 一天他种了一棵奇怪的线段树. 奇怪的线段树是一种与普通线段树类似的结构, 唯一不同的是, 它不一定以每一个区间的中点作为分治中心. 麻烦的是, 小 S 的线段树被风吹散了, 散成 ...

  8. Spring配置项<context:annotation-config>的解释说明

    今天在闲逛CSDN论坛时,看到一位博主写的一篇关于<Spring中IOC的Annotation的实现>的文章, 于是点击进去看了下, 发现在说明中对Spring配置文件中的有些配置节点模凌 ...

  9. 自己实现简单的RSA秘钥生成与加解密(Java )

    最近在学习PKI,顺便接触了一些加密算法.对RSA着重研究了一下,自己也写了一个简单的实现RSA算法的Demo,包括公.私钥生成,加解密的实现.虽然比较简单,但是也大概囊括了RSA加解密的核心思想与流 ...

  10. python多态和鸭子类型

    多态与多态性 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承). 比如:文件分为文本文件,可执行文件(在定义角度) 比如 我们按下 F1 键这个动作: 如果当前在 Fl ...