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

acegi用session控制并发和RememberMe的冲突问题

阅读更多

首先先介绍一下怎么使用这些服务
1,rememberMe服务
a,配置过滤器

  1. <!--authenticationProcessingFilter  start-->  
  2. <bean id="authenticationProcessingFilter"  
  3.     class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">  
  4.     <property name="authenticationManager">  
  5.         <ref bean="authenticationManager" />  
  6.     </property>  
  7.     <property name="authenticationFailureUrl">  
  8.         <value>/Login.html?login_error=1</value>  
  9.     </property>  
  10.     <property name="defaultTargetUrl">  
  11.         <value>/courseInfoList.action</value>  
  12.     </property>  
  13.     <property name="filterProcessesUrl">  
  14.         <value>/j_acegi_security_check</value>  
  15.     </property>  
  16.     <property name="rememberMeServices">//加上RememberMe服务   
  17.         <ref local="rememberMeServices" />  
  18.     </property>  
  19. </bean>  
  20. <!--authenticationProcessingFilter end-->  
c,将Remember提供者加入认证管理器上
  1. <!--AuthenticationManager,用于认证ContextHolder中的Authentication对象。-->  
  2. <bean id="authenticationManager"  
  3.            class="org.acegisecurity.providers.ProviderManager">  
  4.                 <property name="providers">  
  5.       <list>  
  6.              <ref local="daoAuthenticationProvider" />  
  7.              <ref local="rememberMeAuthenticationProvider" />//RememberMe提供者   
  8.              <ref local="anonymousAuthenticationProvider" />  
  9.        </list>  
  10.                  </property>  
  11. <!-- 以下注释掉了,为什么注释掉将在下面解释,这也是今天的主题--->  
  12. <!--    <property name="sessionController">-->  
  13. <!--        <ref bean="concurrentSessionController" />-->  
  14. <!--    </property>-->  
  15. </bean>  

RemberMe服务介绍完了,下面介绍利用session控制并发
2,利用session控制并发
a,配置过滤器


b,把上面那个id为authenticationManager的bean中注释掉的内容添上.

接下来讲一下他们之间的冲突(我用的是acegi-security-1.0.3.jar,希望后续版本能修正这个bug):
我把两者配置好后,测试RememberMe服务时老提示以下错误:
 java.lang.IllegalArgumentException: SessionIdentifierAware did not return a Session ID (org.acegisecurity.ui.WebAuthenticationDetails@957e: RemoteIpAddress: 127.0.0.1; SessionId: null)
at org.springframework.util.Assert.hasText(Assert.java:169)
仔细翻了一下罗时飞写的那个权限管理的书,发现他也提到这个问题,原来两者不能共存,这也是acegi当前版本的一个bug:
注:当出现我上面这个异常时,可能就是这个问题,要是去掉控制并发的session服务后还出现这个异常,那是因为你浏览器保存的Cookie没有清除,清除一下就OK了

  1. <!--控制同一用户名只有一个人在线。start-->  
  2. <bean id="concurrentSessionFilter"  
  3.     class="org.acegisecurity.concurrent.ConcurrentSessionFilter">  
  4.     <property name="sessionRegistry">  
  5.         <ref local="sessionRegistry" />  
  6.     </property>  
  7.     <property name="expiredUrl">  
  8.         <value>/</value>  
  9.     </property>  
  10. </bean>  
  11. <bean id="sessionRegistry"  
  12.     class="org.acegisecurity.concurrent.SessionRegistryImpl" />  
  13. <bean id="concurrentSessionController"  
  14.     class="org.acegisecurity.concurrent.ConcurrentSessionControllerImpl">  
  15.     <property name="maximumSessions">  
  16.         <value>1</value><!--默认为1-->  
  17.     </property>  
  18.     <property name="sessionRegistry">  
  19.         <ref local="sessionRegistry" />  
  20.     </property>  
  21. </bean>  
  22. <!--控制同一用户名只有一个人在线。end -->  

  1. <!--rememberMeProcessingFilter  start-->  
  2. <bean id="rememberMeProcessingFilter"  
  3.     class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter">  
  4.     <property name="authenticationManager">  
  5.         <ref local="authenticationManager" />  
  6.     </property>  
  7.     <property name="rememberMeServices">  
  8.         <ref local="rememberMeServices" />  
  9.     </property>  
  10. </bean>  
  11. <bean id="rememberMeServices"  
  12.     class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices">  
  13.     <property name="userDetailsService">  
  14.         <ref local="userSecurtyDetails" />  
  15.     </property>  
  16.     <property name="key">//这里的key是用来保证cookie的真实性,有效性   
  17.         <value>springRocks</value>  
  18.     </property>  
  19. </bean>  
  20. <bean id="rememberMeAuthenticationProvider"  
  21.     class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">  
  22.     <property name="key">  
  23.         <value>springRocks</value>  
  24.     </property>  
  25. </bean>  
  26. <!--rememberMeProcessingFilter  end-->  
b,在你的认证过滤器上加上RememberMe服务
分享到:
评论
3 楼 east_java 2008-05-28  

-------那么我们是不是现在就不能用了呢?
2 楼 wangzicool 2007-08-08  
Nice
1 楼 weishuwei 2007-06-01  
那个rememberMeProcessingFilter配置应该在条目
"a,配置过滤器 "下的,我排版排了半天,怎么一提交,还错位了啊

相关推荐

    acegi rememberMe和退出

    Acegi Security提供了一个LogoutFilter,该过滤器负责处理注销请求,清理session、Remember Me令牌等,确保用户安全退出。 要实现Acegi Security的"Remember Me"和退出功能,你需要做以下步骤: 1. 配置...

    acegi rememberMe和匿名登录

    本文将深入探讨Acegi Security中的"rememberMe"功能以及匿名登录的实现机制。 "Remember Me"功能在许多Web应用中非常常见,它允许用户在登录后选择“记住我”,以便在未来的会话中自动登录,而无需每次都输入用户名...

    acegi rememberMe

    在描述中提到的博文链接可能详细解析了如何配置和使用Acegi Security的"rememberMe"服务。虽然具体内容未给出,但通常"rememberMe"功能的实现涉及以下几个关键知识点: 1. **RememberMe Services**: 这是核心组件,...

    使用acegi控制用户权限实例

    在本文中,我们将深入探讨如何使用Acegi Security来实现用户权限的控制。 Acegi Security的核心功能包括: 1. **身份验证**:Acegi Security允许你设置多种身份验证机制,如基于数据库的用户名/密码验证、LDAP验证...

    Spring Acegi权限控制

    Spring Acegi权限控制是Spring框架中用于实现Web应用安全的一种解决方案。Acegi Security(现已被Spring Security替代)是一个功能强大的安全框架,它主要解决了认证(Authentication)和授权(Authorization)这两...

    acegi

    - **会话管理(Session Management)**: Acegi 可以监控和管理用户的会话,防止会话劫持、会话固定等安全问题。 - **过滤器链(Filter Chain)**:Acegi 使用过滤器链来拦截请求,执行安全检查,这是其实现安全...

    Acegi例子代码+一个很好的学习Acegi的网址

    3. **会话管理(Session Management)**:Acegi提供了会话管理功能,可以防止会话固定攻击(Session Fixation),并支持会话超时和并发会话控制。 4. **过滤器安全链(Filter Security Interceptor)**:Acegi的...

    基于java的ACEGI

    5. **测试和调试**:在实际运行环境中测试安全功能,确保用户权限设置正确,并使用Acegi提供的日志和调试工具进行问题排查。 6. **处理异常**:配置Acegi的异常处理机制,当用户尝试访问未授权的资源或认证失败时,...

    acegisecurity-1.0.7

    Acegi Security提供了一系列安全服务,如RememberMe服务,可以记住用户的登录状态,使用户在一段时间内无需重新登录。另外,还包括了密码加密服务,确保密码在存储和传输过程中的安全性。 五、与其他Spring组件的...

    Acegi框架介绍 acegi安全与认证

    总的来说,Acegi Security(Spring Security)是Spring生态中的重要组成部分,它提供了一种高效且灵活的方式来管理和保护应用程序的安全,确保用户访问控制的准确性和严密性,从而保障系统的稳定运行。通过深入理解...

    acegi2.0

    Spring Security提供了会话管理功能,包括会话固定保护、会话超时检测和并发会话控制,以防止会话劫持和会话固定攻击。 5. **Remember-Me服务**: 为了提供用户便利,Spring Security 2.0引入了Remember-Me服务,...

    权限Acegi的使用

    5. **会话管理**:Acegi提供了会话管理功能,如会话固定攻击防护、会话超时检测和并发会话控制,以防止恶意用户同时使用同一用户的多个会话。 6. **事件监听**:Acegi允许监听和处理安全相关的事件,如登录成功、...

    集成ACEGI 进行权限控制.rar

    压缩包内的“集成ACEGI 进行权限控制详细介绍”很可能是详细说明如何在项目中集成和配置ACEGI Security的文档。这个文档可能涵盖了从添加依赖、配置安全设置到编写自定义逻辑的所有步骤,是学习和实践ACEGI ...

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

    5. **表达式语言(Expression-Based Access Control)**:Acegi支持使用SpEL(Spring Expression Language)定义访问控制表达式,如`hasRole('ROLE_ADMIN')`,用于判断用户是否拥有指定的角色。 6. **会话管理...

    ACEGI

    使用Acegi Security,开发者可以构建出符合企业级需求的安全系统,同时避免了因更换服务器环境而需要大量重构安全配置的问题。对于熟悉Spring,特别是依赖注入原则的开发者来说,掌握Acegi Security将变得更加容易。...

    acegi 权限控制按钮

    Acegi是Spring框架早期的一个安全模块,用于提供高级的安全性和权限控制。在本文中,我们将深入探讨Acegi如何实现精细的权限控制,直至按钮或HTML元素级别,以及如何将其部署到Tomcat服务器。 首先,Acegi的核心是...

    spring acegi 详细文档

    如果你手头有Acegi的详细文档,如acegi.docx和Acegi.zip中的内容,这将是一个宝贵的资源,帮助你深入理解和解决问题。 总结起来,Spring Acegi是一个强大的安全框架,它的功能包括用户认证、权限控制和安全拦截。...

    Acegi-spring安全框架

    它提供了声明式的安全访问控制,允许开发者在Spring容器中配置安全相关的Bean,利用Spring的依赖注入(IoC)和面向切面编程(AOP)特性。Acegi的主要目标是实现业务对象方法级别的安全控制,确保URL资源、业务类方法...

Global site tag (gtag.js) - Google Analytics