[英]Spring Security Requirements and questions
我正在使用Spring MVC和Spring REST的應用程序上工作,它分為2個服務器,后端是Spring REST接口,前端是普通的SPRING MVC應用程序。 但是,我對MVC服務器前端有一些安全要求,例如
我的問題是
任何指針將不勝感激。
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中內置了這樣一種機制(您必須對此進行研究),但是我認為您可以使用簡單的會話偵聽器和前面提到的自定義身份驗證機制來實現它:
創建一個服務,該服務允許存儲對其ID關聯的會話的引用,並通過其ID提供對該會話的訪問。 您可以使用具有大致以下接口的靜態哈希圖,或單例或更佳的Spring服務bean(我們將其稱為會話存儲庫):
公共無效的putSession(String id,HttpSession session); 公共HttpSession getSessionById(String id);
在身份驗證提供程序中,成功登錄后,將用戶的會話ID字段設置為當前會話ID
這是與安全性相關的敏感代碼(跨會話的東西),因此應謹慎編寫和測試!
希望對您有所幫助。
您可以使用表格登錄。
為了創建動態角色,您可以使用一種方法來實現UserDetailsService接口,
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.