基于Spring框架的Shiro配置

本文详细介绍了如何在web.xml文件中添加Shiro过滤器,通过Spring的applicationContext.xml文件进行Shiro配置,包括添加ShiroFilter定义、securityManager定义以及realm定义,并实现MyRealm类来实现认证授权过程。
一、在web.xml中添加shiro过滤器
  1. <!-- Shiro filter-->   
  2. < filter >   
  3.     < filter-name > shiroFilter </ filter-name >   
  4.     < filter-class >   
  5.         org.springframework.web.filter.DelegatingFilterProxy  
  6.     </ filter-class >   
  7. </ filter >   
  8. < filter-mapping >   
  9.     < filter-name > shiroFilter </ filter-name >   
  10.     < url-pattern > /* </ url-pattern >   
  11. </ filter-mapping >   

二、在Spring的applicationContext.xml中添加shiro配置
1、添加shiroFilter定义
  1. <!-- Shiro Filter -->   
  2. < bean   id = "shiroFilter"   class = "org.apache.shiro.spring.web.ShiroFilterFactoryBean" >   
  3.     < property   name = "securityManager"   ref = "securityManager"   />   
  4.     < property   name = "loginUrl"   value = "/login"   />   
  5.     < property   name = "successUrl"   value = "/user/list"   />   
  6.     < property   name = "unauthorizedUrl"   value = "/login"   />   
  7.     < property   name = "filterChainDefinitions" >   
  8.         < value >   
  9.             /login  =  anon   
  10.             /user/** = authc  
  11.             /role/edit/* = perms[role:edit]  
  12.             /role/save  =  perms [role:edit]  
  13.             /role/list  =  perms [role:view]  
  14.             /** = authc  
  15.         </ value >   
  16.     </ property >   
  17. </ bean >   

2、添加securityManager定义
  1. < bean   id = "securityManager"   class = "org.apache.shiro.web.mgt.DefaultWebSecurityManager" >   
  2.     < property   name = "realm"   ref = "myRealm"   />   
  3. </ bean >   

3、添加realm定义
  1. < bean   id = " myRealm"   class = "com...MyRealm"   />   

三、实现MyRealm:继承AuthorizingRealm,并重写认证授权方法
  1. public   class  MyRealm  extends  AuthorizingRealm{  
  2.   
  3.     private  AccountManager accountManager;  
  4.     public   void  setAccountManager(AccountManager accountManager) {  
  5.         this .accountManager = accountManager;  
  6.     }  
  7.   
  8.     /**  
  9.      * 授权信息  
  10.      */   
  11.     protected  AuthorizationInfo doGetAuthorizationInfo(  
  12.                 PrincipalCollection principals) {  
  13.         String username=(String)principals.fromRealm(getName()).iterator().next();  
  14.         if ( username !=  null  ){  
  15.             User user = accountManager.get( username );  
  16.             if ( user !=  null  && user.getRoles() !=  null  ){  
  17.                 SimpleAuthorizationInfo info = new  SimpleAuthorizationInfo();  
  18.                 for ( SecurityRole each: user.getRoles() ){  
  19.                         info.addRole(each.getName());  
  20.                         info.addStringPermissions(each.getPermissionsAsString());  
  21.                 }  
  22.                 return  info;  
  23.             }  
  24.         }  
  25.         return   null ;  
  26.     }  
  27.   
  28.     /**  
  29.      * 认证信息  
  30.      */   
  31.     protected  AuthenticationInfo doGetAuthenticationInfo(  
  32.                 AuthenticationToken authcToken ) throws  AuthenticationException {  
  33.         UsernamePasswordToken token = (UsernamePasswordToken) authcToken;  
  34.         String userName = token.getUsername();  
  35.         if ( userName !=  null  && ! "" .equals(userName) ){  
  36.             User user = accountManager.login(token.getUsername(),  
  37.                             String.valueOf(token.getPassword()));  
  38.   
  39.             if ( user !=  null  )  
  40.                 return   new  SimpleAuthenticationInfo(  
  41.                             user.getLoginName(),user.getPassword(), getName());  
  42.         }  
  43.         return   null ;  
  44.     }  
  45.   
(http://kdboy.iteye.com/blog/1103794)
程序 = 数据结构 + 算法  程序是为了解决实际问题而存在的。然而为了解决问题,必定会使用到某些数据结构以及设计一个解决这种数据结构的算法。如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功。编程实战算法,不是念PPT,我们讲的就是实战代码实现企业应用。程序 = 数据结构 + 算法                ——图灵奖得主,计算机科学家N.Wirth(沃斯)作为程序员,我们做机器学习也好,做python开发也好,java开发也好。有一种对所有程序员无一例外的刚需 —— 算法数据结构日常增删改查 + 粘贴复制 + 搜索引擎可以实现很多东西。同样,这样也是没有任何竞争力的。我们只可以粘贴复制相似度极高的功能,稍复杂的逻辑没有任何办法。语言有很多,开发框架更是日新月异3个月不学就落后我们可以学习很多语言,很多框架,但招聘不会考你用5种语言10种框架实现同一个功能。真正让程序员有区分度,企业招聘万年不变的重点 —— 算法数据结构。算法代表程序员水平的珠穆朗玛。 本视频微软全球价值专家尹成录制,拒绝念PPT,代码实战数据结构算法导论。除了传统数据结构算法,加入高并发线程安全数据结构,分布式负载均衡算法,分布式哈希表,分布式排序等等现代算法。  算法,晦涩难懂,却又是IT领域受重视的素养之一。可以说,算法能力往往决定了一个程序员能够走多远。因此,BAT/FLAG等国内外各大名企非常喜欢在面试环节考核求职者的算法编程,这也成为了无数准程序员们过不去的一道“坎”。如何入门并成为一名出色的算法工程师?但无论半路出家还是科班出身,除学生时代搞算法竞赛的同学外真正用心学习过算法数据结构太少太少。对于后期想要学习算法数据结构却不得不面对以下问题:没有自己的知识框架,无法关联知识点,学习效率低有疑问而无人解答,有问题无法理解全靠猜测,一个问题卡好几天市面上资料题解质量参差不齐,正确性未可知Google算法-工程师尹成大哥学习算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值