现在的位置: 首页 > 综合 > 正文

Acegi学习一

2014年02月25日 ⁄ 综合 ⁄ 共 1544字 ⁄ 字号 评论关闭

前言

       身份认证是所有应用软件系统需要面对的问题,所以身份认证的共性很强,如果把身份认证独立于应用软件可以带来很多好处。

       Acegi身份认证是一个开源代码项目,它能够实现身份认证和应用系统开发分离。所以掌握它能给我们项目开发带来很多好处。

       如何学习好Acegi是我们用好它的必要前提。作为一个独立的身份认证系统应该具备以下部件:预先配置用户身份和用户权限;能够识别用户身份和对用户授权;

       下面以我们最常用的方式简单介绍Acegi是如何实现身份认证的。预先在数据库中设定用户身份和用户权限,通过spring技术提供数据库访问方式,这样Acegi系统可以获得任何系统中存在的用户的权限,通过配置文件和程序实现把页面输入的用户名和密码传送到,Acegi通过比较确定用户是否可以使用资源。

       Acegi的密码比较有加密和不加密区别,确定用户使用权限可以通过表决机制,使用的资源类型有三种:URL、方法、业务对象

 

下面的介绍以1.06的例子为准:这个例子讲解两种身份,一种身份可以编辑数据库内容,另外一个不可以编辑数据库内容。

 

学习过程

       我学习Acegi经历了三个过程:第一、下载Acegi包和网上的例子配置好,使它能运行;第二、把下载的这个例子中业务相关的数据处理改成Dao方式(原来是jdbc方式);第三、加入数据权限处理

       这样的过程使我对acegi的配置有了进一步了解和体会。

原理

Acegi认证授权主要基于两大技术,一是Filter机制,二是AOP的拦截机制。通过FilterSecurityInterceptor很好地实现了对URI的保护,通过MethodSecurityInterceptor实现了对Service的方法的拦截保护,通过ACL 实现了对prototype类型的Object进行过滤和保护。

HttpSessionContextIntegrationFilter 存储SecurityContext in HttpSession ChannelProcessingFilter 重定向到另一种协议,如httphttps

ConcurrentSessionFilter 因为不使用任何SecurityContextHolder的功能,但是需要更新SessionRegistry来表示当前的发送请求的principal,通过在web.xml中注册Listener监听Session事件,并发布相关消息,然后由SessionRegistry获得消息以判断当前用户的Session数量。

AuthenticationProcessingFilter 普通认证机制(大多数用这个)

CasProcessingFilter CAS认证机制

BasicProcessingFilter Http协议的Basic认证机制

HttpRequestIntegrationFilter Authentication 从容器的HttpServletRequest.getUserPrincipal()获得

JbossIntegrationFilter Jboss相关。

SecurityContextHolderAwareRequestFilter servlet容器结合使用。

RememberMeProcessingFilter 基于Cookies方式进行认证。

AnonymousProcessingFilter 匿名认证。

ExceptionTranslationFilter 捕获所有的Acegi Security 异常,这样要么返回一个HTTP错误响应或者加载一个对应的AuthenticationEntryPoint

AuthenticationEntryPoint 认证入口

抱歉!评论已关闭.