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框架。

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值