package com.cun;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Quickstart {

private static final Logger log = LoggerFactory.getLogger(Quickstart.class);

public static void main(String[] args) {

@SuppressWarnings("deprecation")
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");         //通过chiro创建一个工厂
SecurityManager securityManager = factory.getInstance();                         //通过工厂factory.getInstance创建一个SecurityManager对象,

SecurityUtils.setSecurityManager(securityManager);         //设置安全信息setSecurityManager(securityManager)

//现在设置了一个简单的Shiro环境,让我们看看你能做些什么:

//获取当前执行的用户:
Subject currentUser = SecurityUtils.getSubject();             //通过创建的SecurityUtils.getdubject获取当前正在执行的用户

Session session = currentUser.getSession();        //通过当前用户情况创建一个会话
session.setAttribute("sessionKey", "aValue");           //设置会话的属性保存在某个值中
String value = (String) session.getAttribute("sessionKey");        //得到会话的值
if (value!=null&&value.equals("aValue")) {
log.info("检索正确的值: [" + value + "]");
}else{
log.info("检索错误的值: [" + value + "]");
}

//让我们登录当前用户,以便我们检查角色和权限:
if (!currentUser.isAuthenticated()) {
UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");
token.setRememberMe(true);
try {
currentUser.login(token);
} catch (UnknownAccountException uae) {
log.info("捕获未知用户名异常:" + token.getPrincipal());
} catch (IncorrectCredentialsException ice) {
log.info("捕获密码错误异常: " + token.getPrincipal());
} catch (LockedAccountException lae) {
log.info("账号锁住: " + token.getPrincipal());
}catch (ExcessiveAttemptsException eae) {
log.info("账号错误登录过多异常:: " + token.getPrincipal());
}

// ...在这里捕获更多例外(也许是特定于您的应用程序的自定义?
catch (AuthenticationException ae) {
//unexpected condition? error?
}
}

//判断是否登录成功:
if(currentUser.getPrincipal()!=null)
log.info("用户: [" + currentUser.getPrincipal() + "] 登录成功.");
else
log.warn("登录失败!");
//测试角色:
if (currentUser.hasRole("schwartz")) {
log.info("你有Schwartz角色!");
} else {
log.info("sorry,你只是普通用户没有Schwartz角色");
}

//测试有没该领域的权限
if (currentUser.isPermitted("lightsaber:wield")) {
log.info("你被许可:lightsaber:wield。明智地使用它.");
} else {
log.info("Sorry, lightsaber:wield访问域仅仅属于 schwartz角色.");
}

// (非常强大)实例级别权限:
if (currentUser.isPermitted("winnebago:drive:eagle5")) {
log.info("你被允许(id) 'eagle5'的'drive' winnebago " +
"这是钥匙 - 玩得开心!");
} else {
log.info("Sorry,你不被允许'eagle5'winnebago!");
}

//退出
currentUser.logout();

System.exit(0);
}
}

身份认证功能chiro的使用的更多相关文章

  1. ABP源码分析四十二:ZERO的身份认证

    ABP Zero模块通过自定义实现Asp.Net Identity完成身份认证功能, 对Asp.Net Identity做了较大幅度的扩展.同时重写了ABP核心模块中的permission功能,以实现 ...

  2. FormsAuthentication身份认证源代码

    使用FormsAuthentication类可以实现身份认证功能,这里提供一个asp.net项目的源代码,项目名称KWS.项目实现了登录.退出和判断身份的功能. 关于项目 点击这里下载源代码 http ...

  3. [认证授权] 4.OIDC(OpenId Connect)身份认证授权(核心部分)

    0 目录 认证授权系列:http://www.cnblogs.com/linianhui/category/929878.html 1 什么是OIDC? 看一下官方的介绍(http://openid. ...

  4. ASP.NET CORE中使用Cookie身份认证

    大家在使用ASP.NET的时候一定都用过FormsAuthentication做登录用户的身份认证,FormsAuthentication的核心就是Cookie,ASP.NET会将用户名存储在Cook ...

  5. [认证授权] 4.OIDC(OpenId Connect)身份认证(核心部分)

    1 什么是OIDC? 看一下官方的介绍(http://openid.net/connect/): OpenID Connect 1.0 is a simple identity layer on to ...

  6. ASP.NET Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程 (转载)

    阅读目录 在Asp.Net Core 中使用外部登陆(google.微博...) 中间件管道 The Authentication Middleware The Challenge 与认证中间件进行交 ...

  7. Net Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程

    在Asp.Net Core 中使用外部登陆(google.微博...)   原文出自Rui Figueiredo的博文<External Login Providers in ASP.NET C ...

  8. asp.net core 使用identityServer4的密码模式来进行身份认证(一)

    IdentityServer4是ASP.NET Core的一个包含OpenID和OAuth 2.0协议的框架.具体Oauth 2.0和openId请百度. 前言本博文适用于前后端分离或者为移动产品来后 ...

  9. PHP中对用户身份认证实现两种方法

    用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问.通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制.     当访问者浏览受保护页面时,客户端浏览器会弹出对话 ...

随机推荐

  1. #Java学习之路——基础阶段二(第一篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  2. webpack打包The 'mode' option has not been set,错误提示

    学习到webpack打包这个工具的时候,总是报错.在这里记录一下...... 我是window系统 当使用npm安装好webpack后,你去查看如果出现一下问题. 出现以上问题,我的做法是 先将web ...

  3. JVM 学习(二)Java 内存模型、方法内联、逃逸 --- 2019年4月

    1.Java 的内存模型 定义了 happens-before,如果同一个线程中,字节码的先后顺序,后者观测了前者的运行结果,那么就会按顺序执行. Java 线程之间的通信由 Java 内存模型控制. ...

  4. AI - TensorFlow - 示例01:基本分类

    基本分类 基本分类(Basic classification):https://www.tensorflow.org/tutorials/keras/basic_classification Fash ...

  5. 程序员从宏观、微观角度浅析JVM虚拟机!

    1.问题 1.JAVA文本文件如何被翻译成CLASS二进制文件? 2.如何理解CLASS文件的组成结构? 3.虚拟机如何加载使用类文件的生命周期? 4.虚拟机系列诊断工具如何使用? 5.虚拟机内存淘汰 ...

  6. cassandra读源码---Streaming

    前言 cassandra的很多过程需要网络传输模块,需要在各个节点直接发送文件.包括加入节点,删除节点引起的不同节点的负责ring环的key值发生了变化,导致sstable需要在各个节点中移动. 整体 ...

  7. Java注解(Annotation):请不要小看我!

    Java注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释的代码本身的一部分.注解对于代码的运行效果没有直接影响. 网络上对注解的解释过于严肃.刻板,这并不是我喜欢的风格.尽管这样的 ...

  8. 09 使用Tensorboard查看训练过程

    打开Python Shell,执行以下代码: import tensorflow as tf import numpy as np #输入数据 x_data = np.linspace(-1,1,30 ...

  9. springcloud情操陶冶-bootstrapContext(三)

    本文则将重点阐述context板块的自动配置类,观察其相关的特性并作相应的总结 自动配置类 直接查看cloudcontext板块下的spring.factories对应的EnableAutoConfi ...

  10. 玩转Spring Cloud之配置中心(config server &config client)

     本文内容导航: 一.搭建配置服务中心(config server) 1.1.git方式 1.2.svn方式 1.3.本地文件方式 1.4.解决配置中包含中文内容返回乱码问题 二.搭建配置消费客户端( ...