Shiro入门一

Shiro是由Apache提供的一个强大且易用的Java安全开源框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

在Shrio中主要提供了授权,认证,加密,事务管理(可以不需要web容器 ),web集成,集成等主要功能。

下面就来简单体验一下,我们使用的是Maven项目。

下面是pom文件,shiro依赖了slf4j和log4j包。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.fuwh</groupId>
  <artifactId>shirodemo</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>
      <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-core</artifactId>
      <version>1.3.2</version>
    </dependency>

      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.25</version>
    </dependency>

  </dependencies>

</project>

需要注意的是,在添加slf4j-log4j12依赖包的时候,在Maven仓库中直接添加的依赖信息中,有scope为test,需要去掉,不然可能会导致下面的错误。

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

由于是第一个例子,我们就按照shiro逛网给出的一种简单方式,用配置文件中写入用户名密码的认证方式来体验一下登陆检证。

[users]
fuwh=fuwh1234
package com.fuwh.demo;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
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 ShiroDemo01 {

    private static Logger log=LoggerFactory.getLogger(ShiroDemo01.class);
    public static void main(String[] args) {
        //取得SecurityManager工厂
        Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shiro.ini");
        //取得SecurityManager实例
        SecurityManager securityManager=factory.getInstance();
        //将securityManager绑定到SecurityUtil
        SecurityUtils.setSecurityManager(securityManager);

        /*    至此为止,简单的shiro环境就配置好了    */

        //取得当前用户
        Subject currentUser=SecurityUtils.getSubject();
        //取得当前用户的session
        Session session=currentUser.getSession();
        //可以在web容器中一样使用session
        session.setAttribute("attr","value");
        log.info("取得的值:"+session.getAttribute("attr").toString());

        //使用shiro来进行登陆验证
        if(!currentUser.isAuthenticated()) {
            UsernamePasswordToken token=new UsernamePasswordToken("fuwh","fuwh1234");
            try {
                currentUser.login(token);
                log.info("登陆成功!!!");
            } catch (Exception e) {
                e.printStackTrace();
                log.error("认证失败...");
            }
        }
        currentUser.logout();
    }
}

这就实现了一个简单的通过Shiro的配置文件来验证登陆。

当然,Shiro能做的远远不止这些,下面,我们在shiro.ini文件中加入一些角色的验证信息。

[users]
fuwh=fuwh1234,admin

[roles]
admin=lightsaber:test

修改程序代码如下:

package com.fuwh.demo;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
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 ShiroDemo01 {

    private static Logger log=LoggerFactory.getLogger(ShiroDemo01.class);
    public static void main(String[] args) {
        //取得SecurityManager工厂
        Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shiro.ini");
        //取得SecurityManager实例
        SecurityManager securityManager=factory.getInstance();
        //将securityManager绑定到SecurityUtil
        SecurityUtils.setSecurityManager(securityManager);

        /*    至此为止,简单的shiro环境就配置好了    */

        //取得当前用户
        Subject currentUser=SecurityUtils.getSubject();
        //取得当前用户的session
        Session session=currentUser.getSession();
        //可以在web容器中一样使用session
        session.setAttribute("attr","value");
        log.info("取得的值:"+session.getAttribute("attr").toString());

        //使用shiro来进行登陆验证
        if(!currentUser.isAuthenticated()) {
            UsernamePasswordToken token=new UsernamePasswordToken("fuwh","fuwh1234");
            try {
                currentUser.login(token);
                log.info("登陆成功!!!");
            } catch (Exception e) {
                e.printStackTrace();
                log.error("认证失败...");
            }
        }

        log.info("角色认证开始....");
        if(currentUser.hasRole("admin")) {
            log.info("当前用户有admin角色");
        }else {
            log.info("当前用户没有admin角色");
        }

        log.info("权限认证开始....");
        if(currentUser.isPermitted("lightsaber:debug")) {
            log.info("当前用户有lightsaber:debug权限");
        }else {
            log.info("当前用户没有lightsaber:debug权限");
        }

        currentUser.logout();
    }
}
2017-08-20 21:16:33,432 [main] INFO  [org.apache.shiro.session.mgt.AbstractValidatingSessionManager] - Enabling session validation scheduler...
2017-08-20 21:16:34,048 [main] INFO  [com.fuwh.demo.ShiroDemo01] - 取得的值:value
2017-08-20 21:16:34,051 [main] INFO  [com.fuwh.demo.ShiroDemo01] - 登陆成功!!!
2017-08-20 21:16:34,051 [main] INFO  [com.fuwh.demo.ShiroDemo01] - 角色认证开始....
2017-08-20 21:16:34,051 [main] INFO  [com.fuwh.demo.ShiroDemo01] - 当前用户有admin角色
2017-08-20 21:16:34,051 [main] INFO  [com.fuwh.demo.ShiroDemo01] - 权限认证开始....
2017-08-20 21:16:34,052 [main] INFO  [com.fuwh.demo.ShiroDemo01] - 当前用户没有lightsaber:debug权限

上面就是运行的结果了....

时间: 2024-07-29 13:26:54

Shiro入门一的相关文章

JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

shiro介绍 什么是shiro shiro是Apache的一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权.加密.会话管理等功能,组成了一个通用的安全认证框架.它可以实现如下的功能: 1.验证用户 2.对用户执行访问控制,如:判断用户是否具有角色admin,判断用户是否拥有访问的资源权限. 3.在任何环境下使用SessionAPI.例如C/S程序 4.可以使用多个用户数据源.例如一个是Oracle数据库,另外一个是MySQL数据库. 5.单点登录(SSO)功能

shiro入门应用示例(采用spring+springmvc+mybatis+shiro)

原文:shiro入门应用示例(采用spring+springmvc+mybatis+shiro) 源代码下载地址:http://www.zuidaima.com/share/1550463711726592.htm shiro入门应用示例供参考(采用spring+springmvc+mybatis+shiro) 项目完整源码 链接: http://pan.baidu.com/s/1uyc7I 密码:qk0j

【转】Apache shiro集群实现 (一) shiro入门介绍

近期在ITOO项目中研究使用Apache shiro集群中要解决的两个问题,一个是Session的共享问题,一个是授权信息的cache共享问题,官网上给的例子是Ehcache的实现,在配置说明上不算很详细,我在我们的项目中使用的是nosql(Redis)替代了ehcache做了session和cache的存储,接下来从shiro.Cas.redis.session等等基础知识.基本原理集成的角度来不断的深入分析,系列文章篇幅很长,很丰富,尽请期待! Apache shiro集群实现 (一) sh

Shiro 入门

Apache Shiro(http://shiro.apache.org/) 是 Java 的一个安全(权限)框架. Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境. Shiro 可以完成:认证.授权.加密.会话管理.与Web 集成.缓存等. 主要类介绍 Authentication:身份认证/登录,验证用户是不是拥有相应的身份:1. Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限:即判断用户是

权限项目总结(二)shiro入门

学习大部分知识的时候,都会有这样出现这样的几个问题.这是什么?如何使用?使用的意义所在?再泛化到主题shiro,有这样几个疑惑.什么是shiro?为什么要使用shiro? shiro? ApacheShiro一个功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案. 相比springsecurity,功能上shiro相对较少:使用上相对简单:适用面上,shiro覆盖了小到移动端的应用,大到企业级开发中的web应用及相关程序.而spring s

【三】shiro入门 之 Realm

Realm:域,Shiro 从从Realm获取安全数据(如用户.角色.权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法:也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作:可以把Realm看成DataSource , 即安全数据源. Realm接口如下 String getName(); //返回一个唯一的Realm名字 boolean supports(AuthenticationToken tok

spring+mybatis+shiro入门实例

sql: 1 /* 2 SQLyog Ultimate v11.33 (64 bit) 3 MySQL - 5.1.49-community : Database - db_shiro 4 ********************************************************************* 5 */ 6 7 8 /*!40101 SET NAMES utf8 */; 9 10 /*!40101 SET SQL_MODE=''*/; 11 12 /*!4001

Shiro学习笔记(1)——shiro入门

创建一个简单shiro项目 Shiro的权限 1 简单字符串 2 多层次管理 2 实例级访问控制 1.创建一个简单shiro项目 创建一个java工程 加入shiro需要的jar包 在src下创建log4j配置文件(非必需步骤,可以跳过) # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # dis

Apache shiro集群实现 (一) shiro入门介绍

近期在ITOO项目中研究使用Apache shiro集群中要解决的两个问题,一个是Session的共享问题,一个是授权信息的cache共享问题,官网上给的例子是Ehcache的实现,在配置说明上不算很详细,我在我们的项目中使用的是nosql(Redis)替代了ehcache做了session和cache的存储,接下来从shiro.Cas.redis.session等等基础知识.基本原理集成的角度来不断的深入分析,系列文章篇幅很长,很丰富,尽请期待! 今天我们先来介绍shiro的基本概念 一.sh