`
iamlibo
  • 浏览: 68794 次
社区版块
存档分类
最新评论

Acegi终于可以工作了

阅读更多

看了一段时间Acegi的文档和例子,今天终于把这个难缠的家伙给搞定了.其实就是一些概念的理解的差别,搞得晕头转向的.

在网上找了一些文章和例子,同一个内容却有不同的说法.有的说acegi没有角色的概念,有的说在认证通过后将用户对就在角色保存在Session中.搞得很晕.

经过几天看源码和例子,我觉得acegi是没有角色的概念的.它只是判断一个用户有没有操作或访问某一个资源的权限,如果有权限就可以访问,没有权限就抛出异常。这个中间没有涉及到的角色,但是我们可以通过扩展原有的类加入角色的概念,毕竟大多数的权限控制都有角色。(扩展方法后面有介绍)

基本原理(我写得比较简单,个人也只是简单应用的程度)

1、用户请求登录,根据配置校验用户名和密码,用户名和密码acegi默认是在xml文件中配置,可以通过数据库来保存,主要是实现UserDetailsService.loadUserByUsername方法。这个方法返回一个org.acegisecurity.userdetails .UserDetails。org.acegisecurity.userdetails.User实现了UserDetails。它的构造方法是:

User(String username, String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, GrantedAuthority[] authorities)
Construct the User with the details required by DaoAuthenticationProvider


2、Logout处理

acegi 的logout的地址是j_acegi_logout。例如:<a href="/j_acegi_logout">logout</a>。如果有web.xml的fitler-mapping中配置的不是/*,则要加入这样代码:

<filter-mapping>
<filter-name>Acegi Filter Chain Proxy</filter-name>
<url-pattern>/j_acegi_logout</url-pattern>
</filter-mapping>
在acegi配置中:

<bean id="filterChainProxy"
class="org.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=concurrentSessionFilter,httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor
</value>
</property>
</bean>

<!-- 认证管理器 -->
<bean id="authenticationManager"
class="org.acegisecurity.providers.ProviderManager">
<property name="providers"><!-- 可有多个认证提供器,其中一个证通过就可以了 -->
<list>
<ref local="daoAuthenticationProvider" />
<!-- 匿名认证 -->
<!-- ref local="anonymousAuthenticationProvider"/-->
<!-- ref local="rememberMeAuthenticationProvider" /-->
</list>
</property>
<property name="sessionController"
ref="concurrentSessionController" />
</bean>
<!-- 可以限制同一个用户名在同一时刻成功登录同一个应用的次数 -->
<bean id="concurrentSessionController"
class="org.acegisecurity.concurrent.ConcurrentSessionControllerImpl">
<!-- 每个用户同时登陆一位 -->
<property name="maximumSessions">
<value>1</value>
</property>
<property name="sessionRegistry" ref="sessionRegistry" />
<property name="exceptionIfMaximumExceeded" value="true" />
<!-- 默认是false,即如果超出最大登陆用户限制,你这个登陆还是允许的。但是其他已经用这个用户登陆的会有一个给强制OUT的。
只有是true时,才会不让你这个用户登陆 -->
</bean>
<bean id="sessionRegistry"
class="org.acegisecurity.concurrent.SessionRegistryImpl" />
<bean id="concurrentSessionFilter"
class="org.acegisecurity.concurrent.ConcurrentSessionFilter">
<property name="sessionRegistry" ref="sessionRegistry" />
<property name="expiredUrl">
<value>/</value>
</property>
</bean>

其中:concurrentSessionFilter,建议放在httpSessionContextIntegrationFilter的前面。这样就可以logout了。

<!----> Technorati : acegi

分享到:
评论

相关推荐

    acegi

    Acegi 是一个在Java开发领域,特别是Spring框架中曾经广泛使用的安全组件,全称为Acegi Security。...学习Acegi可以帮助我们更好地理解Spring Security的工作原理,从而提升我们的应用安全开发能力。

    基于java的ACEGI

    首先,我们需要了解Acegi的主要组件和工作原理。 1. **身份验证(Authentication)**:Acegi提供了多种身份验证机制,如基于数据库的用户名/密码验证、LDAP验证等。开发者可以通过实现特定接口自定义认证源,以适应...

    spring acegi 详细文档

    理解Spring Acegi的工作原理和配置对于维护这些系统至关重要。如果你手头有Acegi的详细文档,如acegi.docx和Acegi.zip中的内容,这将是一个宝贵的资源,帮助你深入理解和解决问题。 总结起来,Spring Acegi是一个...

    Acegi使用.pdf

    Acegi安全框架的工作流程可以概括为以下步骤: 1. 用户尝试访问受保护的资源。 2. SecureObject拦截器截获访问请求,并检查请求的上下文信息。 3. 如果需要认证,AuthenticationManager将被调用来验证用户的身份。 ...

    spring acegi 使用工程demo

    6. **jar.GIF 和 result.GIF**:这些可能是教程中的辅助图形,可能展示了配置步骤或者运行结果,帮助理解Acegi的工作流程。 总的来说,这个示例工程将展示如何在Spring环境中配置Acegi,创建用户、角色和权限,以及...

    acegisecurity-1.0.7

    例如,它可以与Spring的Transaction Management一起工作,确保在不安全的操作发生时能回滚事务。 六、配置与使用 在实际项目中,Acegi Security的配置主要通过XML完成,也可以使用Java配置。配置文件中包含了各种...

    acegi 完整实例

    然而,了解Acegi的安全机制对于理解Spring Security的工作原理仍然很有帮助。本实例提供的内容是关于Acegi Security的全面应用,涵盖了多个关键的安全功能。 1. **匿名登录**:Acegi允许用户在不提供详细认证信息的...

    acegi-security源码包

    深入研究Acegi Security的源码,可以让我们更好地理解其内部工作原理,从而定制和优化自己的安全解决方案。例如,通过阅读`org`目录下的类,我们可以看到Acegi Security是如何实现认证、授权、会话管理等核心功能的...

    Acegi Security整合CAS实例

    通过上述详细步骤的介绍,开发者可以了解到如何从零开始配置SSL环境、整合CAS Server与Acegi Security,最终实现安全且高效的单点登录解决方案。这种整合方案在企业级应用中尤为常见,对于提高应用的安全性和便捷性...

    使用acegi控制用户权限实例

    尽管Acegi Security是Spring早期的安全解决方案,但它提供了一套全面的工具,对于理解Spring Security(Acegi的现代替代品)的工作原理非常有帮助。在实际项目中,现在通常推荐使用Spring Security,因为它拥有更...

    spring Acegi例子,很简单的一个acegi实例,容易理解

    7. **异常处理**:当安全规则不满足时,Acegi会抛出相应的安全异常,这些异常可以被捕获并自定义处理。 8. **记住我(Remember Me)**:Acegi还提供了一种“记住我”服务,允许用户在一段时间内无须重新登录,增强...

    acegi-security-tiger-1.0.0-RC2.jar.zip

    Acegi Security是一个已退役的安全框架,它为Java平台上的Spring框架提供了全面的身份验证和...因此,尽管Acegi Security在某些老项目中仍可能被使用,但新的开发工作应转向Spring Security,以获取更好的维护和更新。

    Spring ACEGI手册(部份)

    它可以与Spring MVC的控制器一起工作,为每个受保护的URL提供安全控制。 **使用示例** 在XML配置中,你可以定义访问控制规则,如下: ```xml **" access="ROLE_ADMIN" /&gt; ``` 这段配置表明,所有以`/...

    acegi rememberMe和退出

    在Acegi Security的源码中,可以深入理解这些组件的工作原理,了解如何实现和自定义它们。对于工具类的使用,如RememberMeServices的实现和LogoutFilter的配置,源码提供了很好的学习资源。 总之,Acegi Security的...

    acegi应用安全J2EE安全

    Acegi Security是Spring社区早期开发的一个安全框架,用于增强J2EE应用程序的安全性。这个框架在Spring Security(之前...了解Acegi Security有助于理解Spring Security的工作原理,提升应用安全性的设计和实现能力。

    acegi basic认证具体demo

    通过这个实践,你可以理解到Acegi如何处理认证过程,以及如何配置和自定义其行为以适应你的应用需求。如果你想要进一步了解或优化安全设置,可以参考提供的博客链接,那里可能有更详细的信息和示例。

Global site tag (gtag.js) - Google Analytics