`
jessdy
  • 浏览: 60433 次
  • 性别: Icon_minigender_1
  • 来自: 上海虹口区
社区版块
存档分类
最新评论

Acegi框架总结(一)

阅读更多

如果你觉得自己写一个安全系统比较累,那建议你试一试Acegi这个开源框架,它与Spring能很好的结合,从多方面保护您的软件系统。

Acegi说穿了也就从两个方面保护资源:

一、是利用Servlet的过滤器,来拦截Servlet的请求

二、是利用Spring的AOP,(其实Servlet的过滤器也是AOP)

先来说说Servlet过滤,Acegi由认证管理器来确定用户身份,Acegi默认提供了一个认证管理器——ProvideManager,ProvideManager的authenticate()方法,认证一个Authentication对象,通过用户名(j_username)和密码(j_password)作为参数进行认证,如果验证通过,将用户名保存在session中。当然,你也可以自己写一个认证管理器来实现一些特殊的功能,不过,你需要实现org.acegisecurity.AuthenticationManager接口:

当然,你需要再Spring的配置文件中,将这个认证管理器加载进来:

xml 代码

<list></list>

  1. <!---->  
  2. <bean id="authenticationManager"  
  3.     class="org.acegisecurity.providers.ProviderManager">  
  4.     <property name="providers">  
  5.         <list>  
  6.             <ref local="daoAuthenticationProvider" />  
  7.             <ref local="rememberMeAuthenticationProvider" />  
  8.         list>  
  9.     property>  
  10. bean>  
    xml 代码
    1. <!-- 用户列表 -->  
    2. <bean id="jdbcDaoImpl"  
    3.     class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">  
    4.     <property name="dataSource" ref="dataSource" />  
    5.     <property name="usersByUsernameQuery">  
    6.         <value>  
    7.             SELECT manager_passport, manager_pwd, isuse FROM   
    8.             tb_mms_manager WHERE isuse = 1 and manager_passport = ?   
    9.         </value>  
    10.     </property>  
    11.     <property name="authoritiesByUsernameQuery">  
    12.         <value>  
    13.             SELECT manager_passport,op_code FROM tb_mms_manager m,   
    14.             tb_mms_op o, tb_mms_powergroup p WHERE m.power_group =   
    15.             p.group_id and p.group_op like '%|' +   
    16.             convert(varchar(2),o.op_id) + '|%' and   
    17.             m.manager_passport = ?   
    18.         </value>  
    19.     </property>  
    20. </bean>  

    usersByUsernameQuery属性验证了用户名和密码,值得一提的是usersByUsernameQuery,必须是三个属性,用户名,密码,以及是否可用,除非你重写这个方法,不然三个属性缺一不可。authoritiesByUsernameQuery列举了该用户的所有权限,这里介绍的所有配置,基本上都是用Acegi默认的类来配置的,如果需要扩展功能,完全可以自己定义类来写。

     

中提供了一系列认证提供者,比较常用的认证提供者类型有:DaoAuthenticationProvider(从数据库中获取用户信息)、PasswordDaoAuthenticationProvider(让底层数据源完成)等,他们都是实现了AuthenticationProvider接口。该接口定义了与ProvideManager相同的authenticate()方法。

然后定义daoAuthenticationProvider

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics