身份认证功能chiro的使用
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的使用的更多相关文章
- ABP源码分析四十二:ZERO的身份认证
ABP Zero模块通过自定义实现Asp.Net Identity完成身份认证功能, 对Asp.Net Identity做了较大幅度的扩展.同时重写了ABP核心模块中的permission功能,以实现 ...
- FormsAuthentication身份认证源代码
使用FormsAuthentication类可以实现身份认证功能,这里提供一个asp.net项目的源代码,项目名称KWS.项目实现了登录.退出和判断身份的功能. 关于项目 点击这里下载源代码 http ...
- [认证授权] 4.OIDC(OpenId Connect)身份认证授权(核心部分)
0 目录 认证授权系列:http://www.cnblogs.com/linianhui/category/929878.html 1 什么是OIDC? 看一下官方的介绍(http://openid. ...
- ASP.NET CORE中使用Cookie身份认证
大家在使用ASP.NET的时候一定都用过FormsAuthentication做登录用户的身份认证,FormsAuthentication的核心就是Cookie,ASP.NET会将用户名存储在Cook ...
- [认证授权] 4.OIDC(OpenId Connect)身份认证(核心部分)
1 什么是OIDC? 看一下官方的介绍(http://openid.net/connect/): OpenID Connect 1.0 is a simple identity layer on to ...
- ASP.NET Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程 (转载)
阅读目录 在Asp.Net Core 中使用外部登陆(google.微博...) 中间件管道 The Authentication Middleware The Challenge 与认证中间件进行交 ...
- Net Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程
在Asp.Net Core 中使用外部登陆(google.微博...) 原文出自Rui Figueiredo的博文<External Login Providers in ASP.NET C ...
- asp.net core 使用identityServer4的密码模式来进行身份认证(一)
IdentityServer4是ASP.NET Core的一个包含OpenID和OAuth 2.0协议的框架.具体Oauth 2.0和openId请百度. 前言本博文适用于前后端分离或者为移动产品来后 ...
- PHP中对用户身份认证实现两种方法
用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问.通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制. 当访问者浏览受保护页面时,客户端浏览器会弹出对话 ...
随机推荐
- 【从零开始搭建自己的.NET Core Api框架】(七)授权认证进阶篇
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...
- Vue.js-02:第二章 - 常见的指令的使用
一.前言 在上一章中,我们了解了一些在使用 Vue 进行开发中经常会遇到的基础概念,与传统的前端开发不同,Vue 可以使我们不必再使用 JavaScript 去操作 DOM 元素(还是可以用,但是极度 ...
- 数据结构之表(C语言实现)
抽象数据类型 (abstract data type,ADT) 抽象数据类型是一些操作的集合.抽象数据类型是数学中的定义,在ADT中,我们不关心操作是如何被实现的.因此,这可以看做是模块化的扩充.例如 ...
- springboot~zuul实现网关
网关在微服务里的角色 在微服务架构体系里,网关是非常重要的一个环节,它主要实现了一些功能的统一处理,包括了: 统一授权 统一异常处理 路由导向 跨域处理 限流 实践一下 1 添加依赖 dependen ...
- MySQL系列--4.使用Python3访问数据库
1.安装MySQL驱动 pip install mysql-connector 安装完成后进入命令行模式,导入驱动,如果不报错,说明安装成功 Python 3.6.7 (default, Oct 22 ...
- SLAM+语音机器人DIY系列:(二)ROS入门——4.如何编写ROS的第一个程序hello_world
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- [MySQL] MVCC 多版本并发控制实现的事务
1.没有一个统一的实现标准,实现了非阻塞的读操作,写操作也只锁定必要的行2.通过保存数据在某个时间点的快照实现的3.典型的有乐观并发控制和悲观并发控制4.innodb的mvcc是每次事务都有递增的版本 ...
- SpringMVC+Spring+Mybatis整合
SpringMVC+Spring+Mybatis整合 导包 配置jdbc.properties.log4j.properties jdbc.driver=com.mysql.jdbc.Driver j ...
- js中console使用2
接着上一篇js中console使用1,本片继续介绍js中console的用法 测试代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 ...
- wordpress主题
1.创建wordpress主题:在themes文件下建立新主题black文件夹 2.在black文件夹中放入index.php和style.css文件,其中index对style.css文件的引用 & ...