读书人

Acegi框架小结(一)

发布时间: 2012-11-10 10:48:50 作者: rapoo

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的配置文件中,将这个认证管理器加载进来:

    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

读书人网 >软件架构设计

热点推荐