本文爲轉載學習java
原文連接:http://blog.csdn.net/dsundsun/article/details/11947097web
再看一下session的管理spring
咱們只須要在http中配置session-management就能夠了。那咱們仔細看一下這個標籤吧express
session-fixation-protection是爲了防止固化攻擊的。api
通常來講咱們會配置成migrateSession的。 這個比較保險並且好用。瀏覽器
再看一下spring security是如何對session進行併發控制的。session
<http auto-config="true" use-expressions="true"> <!-- ... --> <session-management> <concurrency-control max-sessions="1"/> </session-management> </http>
這是讓當前這個session的控制量最大是1,這個仍是不夠的,併發
我 們 需 要 在 web.xml 描 述 文 件 中 配 置 中 使 得o.s.s.web.session.HttpSessionEventPublisher生效,這樣servelt 容器將會通知Spring Security session生命週期的事件(經過HttpSessionEventPublisher)。學習
<listener> <listener-class> org.springframework.security.web.session.HttpSessionEventPublisher </listener-class> </listener>
書中提到了這樣的一段話:url
Session併發控制使用o.s.s.core.session.SessionRegistry來維護一個活躍HTTP session的列表而認證過的用戶與其進行關聯。當session建立或過時時,註冊表中會實時進行更新,基於HttpSessionEventPublisher發佈的session 生命週期事件來跟蹤每個認證用戶的活動session的數量。
接下來咱們就能夠驗證一下了:
如同驗證session固化攻擊那樣,咱們須要訪問兩個web瀏覽器。按一下的步驟:
1. 在IE 中,以guest用戶登陸;
2. 接下來,在Firefox中,以相同的用戶(guest)登陸;
3. 最後,返回到IE 中,作任何的動做均可以。你會發現有一個信息提示你的session
已通過期了。
還能夠設置他的session過時重定向地址。
<session-management> <concurrency-control max-sessions="1" expired-url= "/login.do?error=expired"/> </session-management>
在回憶一下剛纔說過的SessionRegister麼。 確定能從中獲取一些信息。
for (Object principal : principals) { List<SessionInformation> sessionInformationList = sessionRegistry.getAllSessions(principal, false); for(SessionInformation sessionInfo : sessionInformationList){ System.out.println(sessionInfo.getPrincipal()); } }
看一下均可以從sessionInformation中獲取什麼信息:
看到了,咱們能夠獲取User的信息.
這裏有個方法咱們須要查一下api:
這樣一看,挺有意思了,呵呵。又進步一點了。。