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

     

      

         

  • 相关阅读:
    (转)介绍一些.net开源项目
    (转).Net有哪些大型项目、大型网站的案例?
    Linux下的awk使用
    linux下的sed使用
    linux下的find、grep、cut使用
    CentOS7下的Zabbix4.4安装配置
    NetBackup linux客户端安装
    bat小脚本
    批量复制指定目录下的文件,并统计执行时间
    iptables
  • 原文地址:https://www.cnblogs.com/zdd-java/p/zdd_shiro.html
Copyright © 2020-2023  润新知