注册本站  论坛  繁體中文

慧民电脑芯片级维修-电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Java >> 开源技术 >> Spring >> Java正文

浅谈Acegi配置-Spring-Java

文章来源:中国IT实验室整理 作者:佚名 更新时间:2008-10-6 12:42:13 【 】 【加入收藏

    Acegi是基于Spring的一个开源的安全认证框架,现在的最新版本是1.04.Acegi的特点就是有很多的过滤器:不过我们也用不到这么多的过滤器,只是可以把它们看作为一个个的模块,在用的时候加上自己用的着的即可,由于认证的流程的方面比较复杂导致它的配置很复杂,如果能摸清它的工作原理还是不太难。下面用比较顺着人思维的流程过一遍

    这里只列出常用的过滤器和拦载器

    1. 过滤器:HttpSessionContextIntegrationFilter,authenticationProcessingFilter,BasicProcessingFilter,RememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter

    2. 拦截器:filterSecurityInterceptor(其实它是过滤器,不过把它放在这里更能说明它的功能),methodSecurityInterceptor看着上面的用红色标出的过滤器是用来认证(表单和HTTP基本认证,当然还有别的不过这两个比较长用)它们是资源访问的入口。其它的过滤器是用来辅助的:HttpSessionContextIntegrationFilter是用来把认证信息记录到Session中的RememberMeProcessingFilter是以cookie的形式来保存认证信息的。 anonymousProcessingFilter是在匿名的时候(这时候是没有认证信息的)给这个用户分配一个匿名的认证信息,exceptionTranslationFilter总结一下异常并处理。在实际中选择适合程序的即可。

    上面只是资源访问的入口,真正保护资源的是这两个拦截器:filterSecurityInterceptor,拦截URL的类(它是个过滤器)

    metohdSecurityInterceptor,拦截类中方法的调用,它们为什么要拦截呢?就是想在访问或调用这些方法之前来判断一下用户是否有访问或调用的权限,有就通过,没有就踢出。

    除此之外,Acegi专门做了两个管理器(实际上就是两个类,为什么会用做这两个管理器,因为认证和授权都有一些的操作,这就需要专门做两个管理器了):authenticationManager(class= org.acegisecurity.providers.ProviderManager),授权管理器accessDecisionManager(class=org.acegisecurity.vote.AffirmativeBased)

    说白了一个用于认证用户,一个是用于权限的授于的先来说认证用户,认证管理器有什么东西呢?只内置了一些提供者:这些提供者呢又是什么呢,他们是提供用户的验证身份信息的,比如从数据库或配置文件里读出用户名和密码,在用户的cookie里读出身份信息(rememberMeProcessingFilter用到的[前面讲了的,有印象吧]),或在Session里读出身份验证信息(HttpSessionContextIntegrationFilter起作用的),这里我们只说一下从数据库或配置文件里读出用户名密码来装配验证信息的,其它的配置类似可以找一下对应api在Spring里配置即可,daoAuthenticationProvider是数据库的提供者class=org.acegisecurity.providers.dao.DaoAuthenticationProvider,而它提供的服务呢又有几种,数据库和配置文件(这是Acegi的两个默认的实现)当然也可以自己实现(实现userDetailsService接口就行)

<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">  
        <property name="providers">  
            <list>  
                <ref local="daoAuthenticationProvider"/>  
            </list>  
        </property>  
    </bean>  
<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">  
        <!-- <property name="userDetailsService"><ref local="InMemoryDaoImpl"/></property> --><!-- 这里有两种选择 -->  
        <property name="userDetailsService"><ref local="jdbcDaoImpl"/></property>  
    </bean>

    如果用户名和密码在配置文件里可以用InMemoryDaoImpl,class=org.acegisecurity.userdetails.memory.InMemoryDaoImpl,在这个类的userMap里配置即可:javafish=java,ROLE_USER,配置了一个用户名为javafish,密码为java,用户组为ROLE_USER的用户,不过最常用的还是数据库的JDBC实现(两个二选一)org.acegisecurity.userdetails.jdbc.JdbcDaoImpl里面需要usersByUsernameQuery和authoritiesByUsernameQuery还有数据源dataSource(有人问为什么呢,userByUsernameQuery是用来通过用户名来查密码的,authoritiesByUsernameQuery是用来通过用户名来查权限的,查询数据库肯定的用数据源吧这个里是用的SpringFrameWork的DataSource)它们查询的sql语句是有讲究的,就是查密码的时候查三个第一个是username,第二个是password,第三个是是否可用,查权限的时候查两个:username和authorities(具体看例子)

<bean id="InMemoryDaoImpl" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">  
        <property name="userMap">  
            <value>  
                javafish=java,ROLE_USER  
            </value>  
        </property>  
    </bean>  
    <bean id="jdbcDaoImpl" class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">  
        <property name="usersByUsernameQuery">  
            <value>select username,password,enabled from users where username=?</value>  
        </property>  
        <property name="authoritiesByUsernameQuery">  
            <value>select username,authority from authorities where username=?</value>  
        </property>  
        <property name="dataSource">  
            <ref local="dataSource"/>  
        </property>  
    </bean>  
      
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
        <property name="driverClassName">  
            <value>com.mysql.jdbc.Driver</value>  
        </property>  
        <property name="url">  
            <value>jdbc:mysql://localhost:3306/test</value>  
        </property>  
        <property name="username">  
            <value>root</value>  
        </property>  
        <property name="password">  
            <value>javafish</value>  
        </property>  
    </bean>

    下面说一下授权,授权管理器又有什么东西呢?accessDecisionManager,Acegi把授权方面弄的比较的形象化,把某个URL或方法是否可以被访问按投票的形式来决定,

  • 上一篇Java:

  • 下一篇Java: 没有了
  • 最 新 热 门
     利用Ruby简化你的Java测试(进阶篇)
     IIS+tomcat整合,并且通过域名访问网站
     Eclipse客户端程序中多线程的使用
     实现向eclipse控制台输入消息
     浅谈Acegi配置-Spring-Java
     反思Spring:由Ruby on Rails想到的
     利用spring2.5和Reflection简化测试中的moc…
     struts2.0表单提交带参数问题
     JSF与Struts的比较 超易懂!
     Struts从零开始六、Struts的模块使用实例
    最 新 推 荐
     浅谈Acegi配置-Spring-Java
     反思Spring:由Ruby on Rails想到的
     利用spring2.5和Reflection简化测试中的moc…
     spring 核心包介绍
     Spring MVC中的新特性
     Spring AOP 用annotation 来实现
     Spring操作Hibernate更方便
     Spring Security 2资源-角色查找源码研究及…
     Spring3.0新特征-Restful support MVC
     Spring Autowire(自动装载)的一次实践
    相 关 文 章

    java package的设计原则
    如何在JAVA端使Oracle存储过程串行地执行
    osCache 配置说明
    Apache Tomcat处理用户请求数据存在输入验证…
    Eclipse报告内存不足和PermSize space错误
    Spring的IoC学习笔记之BeanFactoryPostProc…
    浅谈spring时序调度Quartz
    Java通过JDBC访问Oracle的2个异常
    由Servlet获得FacesContext及ManagedBeans
    软件代码数字签名和 ActiveX 控件基础知识

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    门市地址:广东省佛山市南海区黄岐黄海路133号
    本网站所有内容未经许可不得转载或做其他使用