一、前言

    Apache Shiro与Spring Security一样是Java的一个安全框架。那为什么与Spring整合却用Shiro?不要问为什么,任性!开个玩笑:D 其实我个人是认为Spring Security太过于笨重,要写太多的过滤器。我是个怕麻烦的人,Shiro的配置简单这就是我选择的理由,何况Spring官方自己都推荐使用Shiro。而Shiro权限控制与CAS单点登录的组合更是堪称Java安全中的***~( ̄_, ̄ )……但本文只介绍它们三者的整合配置(说白了就是给自己留个学习笔记啦),若对此方面内容感兴趣的可以到网上搜索学习,在此推荐开涛大神的:《跟我学shiro》

    再次强调,以下内容仅为个人学习笔记,不是篇教程。


二、配置

    Shiro最主要的就是认证与授权,而CAS的重点在于单点登录,其实CAS与Shiro整合的话就是关于认证那块的整合。

    我们先来看web.xml中Shiro与CAS的配置:


    
        contextConfigLocation
        
            classpath*:/cas-client-shiro.xml
        
    
    
    
      
        shiroFilter  
        org.springframework.web.filter.DelegatingFilterProxy  
          
            targetFilterLifecycle  
            true  
          
      
      
        shiroFilter  
        /*  
    
    
    spring mvc servlet配置……
    
    
    
        logoutFilter
        org.springframework.web.filter.DelegatingFilterProxy
     
        
        logoutFilter
        /logout
    
    
    
    
        CAS Single Sign Out Filter
        org.springframework.web.filter.DelegatingFilterProxy
        
            targetBeanName
            singleSignOutFilter
        
    
    
    
        CAS Single Sign Out Filter
        /*
    
    
    ………………其它配置省略………………

    在上面的配置中是否有留意到这货:DelegatingFilterProxy,它会自动的把filter请求交给相应名称的bean处理。例如在启动时,spring会有一个filter请求,这个请求转交给了shiroFilter这个bean去处理了。so^接下来我们就得去找找看shiroFilter在哪?

    此为上文加载的cas-client-shiro.xml配置:

    
    
        
        
        
        
        
            
                
                
            
         
        
                           
                /login/ = casFilter
                /logout = anon
                /** = authc
            
        
    
    
    
    
        
        
        
    
    
    
    
        
        
        
        
        
    
    
    
        ………………
    
        ………………
     
        ………………
    
        ………………
    
        ………………
    
        ………………
        
    
    
        
        
    
    
    
      
        
        
      
    
    
           
        
    

    以上内容众多省略,其实我想强调的是MyRealm。恩,我们要实现的认证、预授权操作都在此自定义的Realm中实现操作。MyRealm继承了CasRealm,CasRealm又继承了AuthorizingRealm。所以,MyRealm中具体写了授权实现逻辑,而认证则调用了CasRealm中的方法……


三、结语

    为什么不好好的写一篇博文教程?首先,这方面的东西内容非常多,不是一两篇能说的清楚的。其次,自己也是刚开始学习,并未完全掌握。最后,本人特别懒,目前只是想给自己留个学习笔记而已。