首先先介绍一下怎么使用这些服务
1,rememberMe服务
a,配置过滤器
-
- <bean id="authenticationProcessingFilter"
- class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
- <property name="authenticationManager">
- <ref bean="authenticationManager" />
- </property>
- <property name="authenticationFailureUrl">
- <value>/Login.html?login_error=1</value>
- </property>
- <property name="defaultTargetUrl">
- <value>/courseInfoList.action</value>
- </property>
- <property name="filterProcessesUrl">
- <value>/j_acegi_security_check</value>
- </property>
- <property name="rememberMeServices">//加上RememberMe服务
- <ref local="rememberMeServices" />
- </property>
- </bean>
-
c,将Remember提供者加入认证管理器上
-
- <bean id="authenticationManager"
- class="org.acegisecurity.providers.ProviderManager">
- <property name="providers">
- <list>
- <ref local="daoAuthenticationProvider" />
- <ref local="rememberMeAuthenticationProvider" />//RememberMe提供者
- <ref local="anonymousAuthenticationProvider" />
- </list>
- </property>
-
-
-
-
- </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了
-
- <bean id="concurrentSessionFilter"
- class="org.acegisecurity.concurrent.ConcurrentSessionFilter">
- <property name="sessionRegistry">
- <ref local="sessionRegistry" />
- </property>
- <property name="expiredUrl">
- <value>/</value>
- </property>
- </bean>
- <bean id="sessionRegistry"
- class="org.acegisecurity.concurrent.SessionRegistryImpl" />
- <bean id="concurrentSessionController"
- class="org.acegisecurity.concurrent.ConcurrentSessionControllerImpl">
- <property name="maximumSessions">
- <value>1</value>
- </property>
- <property name="sessionRegistry">
- <ref local="sessionRegistry" />
- </property>
- </bean>
-
-
- <bean id="rememberMeProcessingFilter"
- class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter">
- <property name="authenticationManager">
- <ref local="authenticationManager" />
- </property>
- <property name="rememberMeServices">
- <ref local="rememberMeServices" />
- </property>
- </bean>
- <bean id="rememberMeServices"
- class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices">
- <property name="userDetailsService">
- <ref local="userSecurtyDetails" />
- </property>
- <property name="key">//这里的key是用来保证cookie的真实性,有效性
- <value>springRocks</value>
- </property>
- </bean>
- <bean id="rememberMeAuthenticationProvider"
- class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
- <property name="key">
- <value>springRocks</value>
- </property>
- </bean>
-
b,在你的认证过滤器上加上RememberMe服务
分享到:
相关推荐
10. Remember Me(记住我功能):一次登录后,下次访问无需重新登录。 Shiro的架构从外部来看,API简单易用,具有明确的API契约。从内部来看,它拥有可扩展的架构,便于用户自定义实现。Shiro对外的API核心是...
例如,Session一致性验证确保了用户的会话在多个并发请求中的一致性。Remember-Me服务则提供了自动登录功能,使得用户在一段时间内无须重新登录。 2. **方法安全** - 使用AOP(面向切面编程)模式实现安全代理,可以...
如何在 JSP 页面中使用这些标签。 **7. 信道安全** - **7.1 总述** 信道安全是指保护网络通信的安全。 - **7.2 配置** 如何配置信道安全。 - **7.3 总结** 信道安全的重要性及其实现方法。 #### 四、...
- **Remember-Me 认证**:支持“记住我”功能,以便用户无需每次都输入凭证即可访问受保护的资源。 - **添加 HTTP/HTTPS 信道安全**:通过 `<https>` 元素来配置 HTTPS 支持,确保数据传输的安全性。 - **会话管理**...
- **记住我认证**:使用 `<remember-me>` 元素启用记住我功能,以便用户下次访问时无需重新登录。 - **添加 HTTP/HTTPS 通道安全**:使用 `<http>` 元素下的 `<requires-channel>` 子元素来强制某些 URL 使用 HTTPS ...
- **Remember-Me 认证** - 支持记住用户登录状态的功能,使用户无需频繁输入用户名和密码。 - **添加 HTTP/HTTPS 信道安全** - 可以指定某些资源只能通过 HTTPS 访问,增强数据传输的安全性。 - **同步 Session...
Spring Security 的前身是 Acegi 安全框架,在被 Spring 社区采纳后,经过不断发展和改进,成为了今天广泛使用的 Spring Security。自发布以来,Spring Security 不断进行版本更新,提供了更多的功能和更好的安全性...