【原】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*

 

  

     

原文地址:https://www.cnblogs.com/zdd-java/p/zdd_shiro.html