2015-03-31 98 views
0

1我遇到問題。我在我的項目用戶,管理員,專家中擔任3個角色。 2 3不同的用戶登錄頁面。 3我想要的是當會話過期時,以及之後,如果用戶做了任何事件,頁面應根據那裏的角色指示。 例如,用戶應該重定向到用戶登錄和管理員來管理登錄。在會話過期後重定向到登錄頁面

我已經閱讀了很多關於它的文檔。有一些給出了添加過​​濾器和檢查過濾器中的會話的想法。 但是這個問題是我沒有得到過濾器的作用。' 所以SpringSecurityHolder將在Filter中工作。

我也讀過有關採用事件的ApplicationListerner。 我有返回代碼,但我不知道如何從listerner類

import java.util.List; 

import org.springframework.context.ApplicationListener; 
import org.springframework.security.core.Authentication; 
import org.springframework.security.core.GrantedAuthority; 
import org.springframework.security.core.context.SecurityContext; 
import org.springframework.security.core.context.SecurityContextHolder; 
import org.springframework.security.web.session.HttpSessionDestroyedEvent; 

public class SessionTimeoutHandler implements ApplicationListener<HttpSessionDestroyedEvent>{ 

    @Override 
    public void onApplicationEvent(HttpSessionDestroyedEvent event) { 

     List<SecurityContext> lstSecurityContext = event 
       .getSecurityContexts(); 

     for (SecurityContext securityContext : lstSecurityContext) 
     { 
      Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 

      List<GrantedAuthority> authList = (List<GrantedAuthority>) authentication 
        .getAuthorities(); 
      String userRole = authList.get(0).getAuthority(); 

      if(userRole.equals("ROLE_ADMIN")){ 


      }else if(userRole.equals("ROLE_EXPERT")){ 

      }else{ 

      } 

     } 

    } 

} 

請幫我我如何將能夠重定向頁面內直接。

感謝您的幫助

+0

所以我刪除了我的答案,並且據我所知和理解,它不會,因爲你在你身邊的代碼正在獲取身份驗證,這是不存在的,因爲用戶已經註銷。請閱讀一些基礎知識,它們會有所幫助。 – 2015-03-31 12:24:29

+0

但你認爲必須有一些功能,我們可以從中決定在哪裏重定向頁面 – 2015-03-31 12:34:56

回答

3

真的是沒有確定用戶是什麼樣的作用在一次HTTP會話過期,因爲一旦到期的用戶信息都丟失了一個好辦法。

您無法從ApplicationListener執行重定向,因爲當用戶瀏覽器未發出請求時(我們無法將信息推送到瀏覽器,除非有連接打開),會話可能會過期。

我可以給你的最佳解決方案是設置一個cookie,指出用戶所處的角色。該cookie將超過會話,然後您可以根據cookie執行重定向到適當的登錄頁面。

當然,如果多個不同類型的用戶正在使用同一臺計算機,因爲它們共享相同的Cookie,則會失敗。

+0

我的方式我想通過編寫基於控制器的異常處理程序和重定向,如果它得到該會話異常。 – 2015-04-01 06:40:21

+0

會話到期發生在後臺,因此沒有引用HttpServletResponse來發送重定向。 – 2015-04-01 12:40:47

+0

我在會話中保存Session.e.g UserName中的一些值。 所以,如果用戶不會做超過10分鐘的活動。會話將超時。所以用戶名值也將被銷燬。所以我可以檢查我的控制器。 你不覺得它會起作用。 我的控制器映射與不同的用戶不同。對於管理員,它使用/ admin /映射。 放一些燈。 – 2015-04-02 06:24:09

相關問題