- 浏览: 263771 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (87)
- Java (6)
- Frameworks (1)
- JavaWeb (3)
- Spring (6)
- Hibernate (26)
- Maven (2)
- Plugin (1)
- Velocity (1)
- Freemarker (1)
- Spring security (18)
- Google (5)
- Guice (5)
- rmi (1)
- Annotation (1)
- Binding (1)
- commons-fileupload (3)
- fileupload (3)
- ehcache (1)
- ApplicationContext (1)
- Resource (1)
- Validator (1)
- PropertyEditor (1)
- one-to-many (5)
- cascade (2)
- MessageSource (1)
- Serialize (1)
- Serializable (1)
- delete (1)
- delete-orphan (1)
- fetch (1)
- one-to-one (1)
- join (4)
- DomainObject (1)
- CRUD (1)
- composite-element (1)
- Hibernate ORM (14)
- dynamic-insert (1)
- dynamic-update (1)
- Search (1)
- DDD (0)
- Job (0)
- element (1)
- Unique (1)
- Group (1)
- tomcat (1)
- https (1)
- mysql (1)
最新评论
-
xurunchengof:
[url][url][url][img][img][img][ ...
Spring Security 3多用户登录实现之三 验证过滤器 -
Wind_ZhongGang:
yo8237233 写道你这样的话如果上传文件超过了50000 ...
Spring集成Commons fileupload,文件上传 -
yo8237233:
你这样的话如果上传文件超过了50000000就会报异常
Spring集成Commons fileupload,文件上传 -
zhuzhiguosnail:
Wind_ZhongGang 写道lianglaiyang 写 ...
Spring Security 3多用户登录实现一 -
曾老师:
?????
Spring Security 3用户登录实现之十 用户切换
Spring Security为我们提供了SessionAuthenticationStrategy接口来定制针对Session的一些特殊管理,如防Session的固定攻击, 防Session的单用户多次登陆等, 这些特殊的管理功能Spring Security都为我们提供了相应的类,如下示:
1. SessionFixationProtectionStrategy, 这个实现SessionAuthenticationStrategy的类是用于防止Session的固定攻击的
这里先从Session的固定攻击说起, 话说什么是Session的固定攻击呢, 当我们尝试登录时, Spring Security会为我们创建一个Session, 并将SessionId放置在Cookie或URL中, 如果没有使用Spring Security的防Session固定攻击的功能的话, 当用户登录成功后, 这个SessionId是不会改变的, 如果在登录前这个SessionId就因为某种原因而被窃取了,那就会让别有用心者在不知道用户账户的情况下, 通过使用SessionId来达到查看需用户登录的资源。 那么Spring Security又是如何来解决这个问题的呢, 办法很简单, 在用户登录成功后重新创建一个Session, 并将旧有Session的信息转移到新建的Session中, 当然这是可选的, 至于你想不想转移这些信息或者转移哪些信息这些都是可以选择的, 可由用户自主选择。
源码解释
//是否需要转移Session中的值
private boolean migrateSessionAttributes = true;
//需要转移的Session中的值的列表
private List<String> retainedAttributes = null;
//是否创建新的Session
private boolean alwaysCreateSession;
//该方法是实现Session管理的主方法, 也就是SessionAuthenticationStrategy接口中的方法
public void onAuthentication(Authentication authentication, HttpServletRequest request, HttpServletResponse response) {
boolean hadSessionAlready = request.getSession(false) != null;
//如果没有Session存在则返回不做处理
if (!hadSessionAlready && !alwaysCreateSession) {
return;
}
// 创建一个Session
HttpSession session = request.getSession();
if (hadSessionAlready && request.isRequestedSessionIdValid()) {
// We need to migrate to a new session
String originalSessionId = session.getId();
if (logger.isDebugEnabled()) {
logger.debug("Invalidating session with Id '" + originalSessionId +"' " + (migrateSessionAttributes ?
"and" : "without") + " migrating attributes.");
}
Map<String, Object> attributesToMigrate = extractAttributes(session);
session.invalidate();
session = request.getSession(true); // we now have a new session
if (logger.isDebugEnabled()) {
logger.debug("Started new session: " + session.getId());
}
if (originalSessionId.equals(session.getId())) {
logger.warn("Your servlet container did not change the session ID when a new session was created. You will" +
" not be adequately protected against session-fixation attacks");
}
//转移Session中的属性值
transferAttributes(attributesToMigrate, session);
//Session转移后需要做的额外工作, 当前类中的方法为空方法,可由用户自主实现
onSessionChange(originalSessionId, session, authentication);
}
}
2. ConcurrentSessionControlStrategy这个类是用于防止Session的单用户多次登陆的, 值得一提的是ConcurrentSessionControlStrategy是SessionFixationProtectionStrategy的子类,所以SessionFixationProtectionStrategy类也具有防Session的固定攻击的功能
在没有这个辅助类的情况下, 有这样一种情况我们无法避免, 那就是同一个用户在不同机器的不同浏览器上可以进行多次登录, 如果我们希望杜绝这种情况的发生, 就需要使用到这个类, 用来控制同一个用户同一时刻最多的登录次数, 如果设置maximumSessions为1, 表时只希望用户在同一时刻只能登录一次。那么Spring Security又是如何控制用户登录次数的呢, 这就需要讲到sessionRegistry这个接口了, 它有个默认实现SessionRegistryImpl, 当用户登录成功后,会调用registerNewSession方法,将当前用户登录的一些基本信息如SessionId, 用户名等放置在内存中, 那么当同一用户再次登录时, 会调用sessionRegistry的getAllSessions方法, 获取登录用户的登录次数, 再与设置的最大次数比较就可以知道用户是否超出了登录限制。sessionRegistry的getAllPrincipals方法可以得到当前系统中的已登录用户,即在线用户,这非常有用。
SessionRegistry源码
package org.springframework.security.core.session; import java.util.List; /** * Maintains a registry of <code>SessionInformation</code> instances. * * @author Ben Alex */ public interface SessionRegistry { //获取当前系统的在线用户 List<Object> getAllPrincipals(); //根据传入的用户名参数, 获取当前用户的登录信息列表 List<SessionInformation> getAllSessions(Object principal, boolean includeExpiredSessions); //根据SessionId, 获取Session的基本信息,如最后一次访问时间,是否过期等 SessionInformation getSessionInformation(String sessionId); //根据SessionId,更新最后访问时间 void refreshLastRequest(String sessionId); //登录成功后注册一个新的SessionInformation到内存中 void registerNewSession(String sessionId, Object principal); //根据SessionId移除SessionInformation void removeSessionInformation(String sessionId); }
3. Spring Security还为我们提供了一个类叫NullAuthenticatedSessionStrategy,查看源码可以发现只有一个空的方法实现, 从类名也可顾名思义,知道这个类的作用就是什么事也不做
评论
<beans:property name="exceptionIfMaximumExceeded" value="true" />
使用这两个,可以放置不同浏览器用同一个账号登录,
但有无办法放置同一个浏览器中,开多个窗口,用同一个账号登录呢?
发表评论
-
Spring Security 之 Digest Authentication
2013-01-04 16:22 0<?xml version=" ... -
Spring Security 之 Basic Authentication
2013-01-04 11:58 2048Spring Security实现Basic A ... -
Spring Security 3用户登录实现之十二 授权判断
2012-11-29 15:38 2252Spring Security在验证用户登录后的另 ... -
Spring Security 3多用户登录实现之十一 退出
2012-11-19 21:41 2661Spring Security的退出功能由Logou ... -
Spring Security 3用户登录实现之十 用户切换
2012-11-17 18:15 6337部分情况下用户希望能够在不知道其它用户账号及密码的 ... -
Spring Security 3多用户登录实现之九 基于持久化存储的自动登录
2012-11-17 00:40 6314Spring Security实现自动登录的基本流 ... -
Spring Security 3多用户登录实现之八 基于Cookie的自动登录
2012-11-15 22:44 11038Spring Security为我们提供了两种方式的自 ... -
Spring Security 3多用户登录实现之七 用户验证失败处理改进
2012-11-11 11:24 8982验证登录失败后的处理的常见处理是返回到登录页面,并 ... -
Spring Security 3多用户登录实现之六 用户验证后处理
2012-11-11 00:42 4233验证用户后主要有这样两种走向,一种是验证失败,一种 ... -
Spring Security 3多用户登录实现之五 验证用户凭证
2012-11-11 00:42 4969有了用户凭证后, 如何验证用户的凭证是否正确呢, 这就需 ... -
Spring Security 3多用户登录实现之四 用户凭证
2012-11-10 20:00 5111前讲讲到AuthenticationFilt ... -
Spring Security 3多用户登录实现之三 验证过滤器
2012-11-10 19:58 15173当填写完成登录表单提交后,首先会被对应的提交表单提起 ... -
Spring Security 3多用户登录实现之二 多登录界面展示
2012-11-10 19:58 9805接前讲,首先针对一个多种用户类型的登录需求,需要先 ... -
Spring Security 3多用户登录实现一
2012-11-10 19:57 5089使用Spring Security 3 来实现多种 ... -
Spring security customize password encoder
2011-07-29 22:21 2427Spring security为我们 ... -
Spring security防用户重复登录
2011-07-28 23:28 3965使用Spring security如何防止用户的重复登录呢 ... -
Spring security用户权限数据库配置
2011-07-28 22:11 6565关于安全性服务,有两个重要的概念需要理解,一是认证,即判断 ... -
Spring security HTTP Basic认证
2011-07-27 21:54 5301Spring security框架集成了多种流行的安全认证 ...
相关推荐
- 在Spring Security的XML配置文件中,`<http>`元素下的`<session-management>`用于配置会话管理。例如,可以添加`<concurrency-control>`子元素来设置并发会话策略。 - `<session-management>`还可以配置`...
在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...
.sessionManagement() .maximumSessions(1) // 设置最大会话数为1 .sessionRegistry(sessionRegistry) .sessionAuthenticationStrategy(mySessionAuthenticationStrategy); // 其他配置... } } ``` 5. **通知...
Spring Security 是一款基于 Spring 框架的安全插件,提供了完整的安全性解决方案,包括身份认证(Authentication)、授权(Authorization)以及会话管理(Session Management)等功能。Spring Security 的设计目标是为...
4. **会话管理(Session Management)**:Spring Security 提供了会话管理和会话固定防护功能。在demos中,你可以了解如何配置会话超时、跨站点请求伪造(CSRF)防护,以及如何防止会话固定攻击。 5. **异常处理...
4. **会话管理(Session Management)**:Spring Security提供了强大的会话管理功能,可以限制同一用户同时在线的数量,检测会话劫持和会话固定攻击,并能实现会话超时策略。 5. **CSRF保护(Cross-Site Request ...
标题:springsecurity3.1.pdf 描述:springsecurity3.1.pdf 标签:spring security3.1 部分内容:SpringSecurity Reference Documentation by Ben Alex and Luke Taylor 3.1.4.RELEASE **一、Spring Security 3.1...
6. **会话管理(Session Management)**:Spring Security 提供了会话管理功能,包括会话固定保护、会话超时和并发会话控制,防止会话劫持和会话固定攻击。 7. **CSRF(跨站请求伪造)防护**:Spring Security 自动...
5. **会话管理(Session Management)**:SpringSecurity可以控制会话的创建、生命周期和并发控制,防止会话固定攻击(Session Fixation)和会话劫持(Session Hijacking)。 6. **CSRF防护(Cross-Site Request ...
5. **Session Management**:Spring Security提供了会话管理策略,如限制同一用户并发会话的数量,防止会话固定攻击。 6. **CSRF防护**:为防止跨站请求伪造(Cross-Site Request Forgery)攻击,Spring Security...
5. **会话管理(Session Management)**:Spring Security 可以配置会话超时、会话固定攻击防护等策略,保护用户会话的安全。 **Spring MVC 知识点** 1. **DispatcherServlet**:作为 Spring MVC 的核心,它负责...
在Spring Security 2中,配置Cookie的保存时间是一项重要的任务,因为这关乎到用户的会话持久性和安全性。Cookie是Web应用程序中用于存储用户状态的一种机制,例如登录信息、个性化设置等。正确设置Cookie的生命周期...
- **Session Management**:Spring Security提供了会话固定保护,防止会话劫持和会话超时等安全问题。 - **Concurrent Session Control**:可以限制同一用户同时登录的会话数量,防止账户被非法使用。 5. **CSRF...
- **Session Management**:控制会话生命周期,如会话固定策略和并发会话控制。 5. **AOP安全** - **方法安全**:Spring Security使用AOP(面向切面编程)在方法级别实现权限控制。 - **表达式式访问控制**:...
6. **会话管理(Session Management)**:Spring Security 还提供了会话管理功能,可以防止会话固定攻击(Session Fixation),并支持会话超时和并发会话控制。 7. **CSRF(跨站请求伪造)防护**:默认情况下,...
通过`http.sessionManagement()`,我们可以设置会话策略,如`maximumSessionMax(1)`限制用户只能同时有一个会话。 6. **异常处理**:当用户尝试访问未授权的资源时,Spring Security 将抛出`AccessDeniedException`...
7. **Session Management**:Spring Security 可以控制会话的最大并发数量,防止会话固定攻击,并提供会话超时和会话劫持的防护。 8. **国际化**:Spring Security 支持多语言,可以在认证失败和权限不足时显示不同...
6. **Session Management**:Spring Security 可以帮助管理会话,防止会话固定攻击和会话劫持。 现在,让我们通过一个简单的 Spring Security Demo 来了解其基本配置和使用: 1. **添加依赖**:在 Maven 或 Gradle...
这个压缩包文件"springsecurity"很可能包含了一个Spring Security的示例项目,让我们来深入探讨一下Spring Security的相关知识点。 1. **Spring Security架构**: Spring Security的核心组件包括过滤器链、安全性...
它主要包括四个主要组件:认证(Authentication)、授权(Authorization)、访问决策管理(Access Decision Management)和会话管理(Session Management)。在Spring Security中,认证是指确定用户是谁,而授权则是...