簡體   English   中英

春季安全要求和問題

[英]Spring Security Requirements and questions

我正在使用Spring MVC和Spring REST的應用程序上工作,它分為2個服務器,后端是Spring REST接口,前端是普通的SPRING MVC應用程序。 但是,我對MVC服務器前端有一些安全要求,例如

  1. 每個用戶只有一個活動會話
  2. 指定時間后的會話超時
  3. 能夠從應用程序上的表單創建新角色,並使這些角色應用於運行時動態訪問的URL,而無需硬編碼到配置中。

我的問題是

  1. 有沒有一種方法可以實現自定義登錄模塊,該模塊將對用戶進行身份驗證,但仍使用Spring Security在登錄后和注銷時管理訪問控制。
  2. 我看到的所有示例都使用在Spring配置文件中配置的預定義角色,但是我們的要求是,我們不知道系統中將要扮演的角色以及在部署時將允許訪問的URL,這些都是由管理員通過用戶界面配置,所以問題是有沒有我可以用來查看如何在Spring Security中處理的示例。
  3. 最后,上面提到的單個會話要求。

任何指針將不勝感激。

1)有沒有一種方法可以實現一個自定義的登錄模塊,該模塊將對用戶進行身份驗證,但仍使用Spring Security在登錄后和注銷時管理訪問控制。

是。 您可以通過實現org.springframework.security.authentication.AuthenticationProvider並將其設置為bean(使用注解或XML表示)來提供自己的認證機制:

@Service(“ myAuthenticationProvider”)公共類TangoAuthenticationProvider實現AuthenticationProvider {

 @Override public boolean supports(Class<?> authentication) { //your code } @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { //your code } 

然后,並指示Spring安全性在您的安全性上下文中使用它:

<authentication-manager>
    <authentication-provider ref="tangoAuthenticationProvider" />
</authentication-manager>

看到這個問題 ,當然還有spring安全文檔

2)動態創建的角色 :我無法回答硫代部分,對此沒有經驗。

3)單節要求

也許在Spring Security中內置了這樣一種機制(您必須對此進行研究),但是我認為您可以使用簡單的會話偵聽器和前面提到的自定義身份驗證機制來實現它:

  1. 將會話ID字段添加到您的用戶實體(或其他位置,但以某種方式將您的用戶ID與會話ID關聯)
  2. 創建一個服務,該服務允許存儲對其ID關聯的會話的引用,並通過其ID提供對該會話的訪問。 您可以使用具有大致以下接口的靜態哈希圖,或單例或更佳的Spring服務bean(我們將其稱為會話存儲庫):

    公共無效的putSession(String id,HttpSession session); 公共HttpSession getSessionById(String id);

  3. 在身份驗證提供程序中,成功登錄后,將用戶的會話ID字段設置為當前會話ID

  4. 在身份驗證邏輯中,如果用戶的sessionId字段不為null,則要么禁止身份驗證(那么您就不需要引用會話機制的內容),要么更可能是真正的要求,然后繼續使用戶的身份無效。通過使用用戶的sessionId字段的值從會話存儲庫獲取其他正在進行的會話
  5. 在會話偵聽器中:在會話創建時:將會話存儲在會話存儲庫中在會話刪除時:如果有登錄用戶,則清除其sessionId字段; 清除對會話的引用,以避免內存泄漏。

這是與安全性相關的敏感代碼(跨會話的東西),因此應謹慎編寫和測試!

希望對您有所幫助。

您可以使用表格登錄。

為了創建動態角色,您可以使用一種方法來實現UserDetailsS​​ervice接口,

public UserDetails loadUserByUsername(String userId) 
            throws UsernameNotFoundException, DataAccessException
    {
... 
/*
fetch your role information every time the user re-login
you can store the new role in the database and fetch it from here
*/

}

之后,您可以使用數據庫角色在身份驗證/授權上配置spring-security文件

為了滿足每個用戶的需求,請嘗試將所有用戶-sessionid對保留在數據庫或應用程序級別的哈希圖中。 有一個spring ContextLoaderListener,(位於鈎子下面的HttpSessionListener),因此您可以從偵聽器中從應用程序中添加/刪除用戶-會話ID對。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM