spring security3.x學習(23)_session管理和session監聽

本文爲轉載學習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:

這樣一看,挺有意思了,呵呵。又進步一點了。。

相關文章
相關標籤/搜索