shiro原理实践+++

Posted wangdan1030

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shiro原理实践+++相关的知识,希望对你有一定的参考价值。

   最近的项目中,因为用到了shiro权限控制,小编自己总结了一些。咱们进入正题:

   一 做什么:

   shiro是Appache旗下的关于权限控制的一个产品,实现了对于权限的控制。是由java语言实现的一个框架,通过一个简单易用的API提供身份验证、授权、加密会话管理等功能。在实现单点登录方面为大型企业系统提供了便利。此外shiro可以实现共享一个session对象,并且没有对应用服务器或web应用服务器存在回话管理依赖。

二 架构:

 

Subject:操作用户

SecurityManager:管理所有用户的安全操作,他是shiro框架的核心,典型的外观模式,通过SecurityManager来管理内部组件实例,并通过他来实现提供安全管理的各种服务。

Realm:shiro与数据之间起拦截作用,对当前用户执行认证和授权验证,会从realm中查找用户和权限,

完整架构图:

 

在这张架构图中我们可以看到realm提供多种数据源支持: JDBC连接数据库进行验证,LDAPADDS等。

除了我门上面提供的核心组件:subject SecurityManager、Realm外,还有Authenticator(认证)、Authorizer(授权)、SessionManager(session管理)、CacheManager(缓存支持)。

Authenticator:核实用户身份,通常是用户密码组合

Authorizer:授权其实就是对资源的控制访问,控制用户能访问应用中的哪些资源或是页面。

SessionManager:控制session,共享session

CacheManager:对shiro的其他组件提供缓存支持。

三 使用

1. 通过加载jar包把shiro 加入到项目中

<dependencies>

        <dependency org="commons-logging" name="commons-logging"

            rev="1.1.1" conf="dist->default" />

        <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.5.8"

            conf="dist->default" />

        <dependency org="org.apache.shiro" name="shiro-core" rev="1.0.0-incubating"

            conf="dist->default" />

        <dependency org="org.apache.shiro" name="shiro-web" rev="1.0.0-incubating"

            conf="dist->default" />

</dependencies>

2. 常用验证方式:

(1) 简单身份验证:

 public class ShiroTest 

     private static Logger logger = LoggerFactory.getLogger(ShiroTest.class);

 
     public static void main(String[] args) 

         // Using the IniSecurityManagerFactory, which will use the an INI file

         // as the security file.

         Factory<org.apache.shiro.mgt.SecurityManager> factory = 

            new IniSecurityManagerFactory("auth.ini");


       // Setting up the SecurityManager...

        org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();

        SecurityUtils.setSecurityManager(securityManager);

         Subject user = SecurityUtils.getSubject();


        logger.info("User is authenticated:  " + user.isAuthenticated());

       
         UsernamePasswordToken token = new UsernamePasswordToken("bjangles", "dance");

        
        user.login(token);
      

         logger.info("User is authenticated:  " + user.isAuthenticated());

     

 

PSauth.inishiro添加用户的一个配置文件,当然这里也可以直接去数据库查询

2LDAP验证:

public static void main(String[] args) 

 

        // Using the IniSecurityManagerFactory, which will use the an INI file

        // as the security file.

        Factory<org.apache.shiro.mgt.SecurityManager> factory = 

            new IniSecurityManagerFactory("actived.ini");

 

        // Setting up the SecurityManager...

        org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();

        SecurityUtils.setSecurityManager(securityManager);

        Subject user = SecurityUtils.getSubject();

        logger.info("User is authenticated:  " + user.isAuthenticated());

        UsernamePasswordToken token = 

        new UsernamePasswordToken(

            "cn=Cornelius Buckley,ou=people,o=sevenSeas", "argh");

        user.login(token);

        logger.info("User is authenticated:  " + user.isAuthenticated());

    
总结: shiro还有很多底层的东西需要我们去挖掘,会有那么一天我们自己就能够写出一个shiro框架。

 

以上是关于shiro原理实践+++的主要内容,如果未能解决你的问题,请参考以下文章

初识shiro

Shiro 简介

SpringBoot集成Shiro

原理实践,全面讲解Logstash+Kibana+kafka

跟我学Shiro实践-简单的认证授权

自动化运维工具saltstack原理使用和优化实践