簡體   English   中英

使用SSO進行Java登錄

[英]Java Login with SSO

我有一個運行SAML和IS WO2服務器的servlet。 登錄后,系統從LDAP獲取用戶數據。 該庫是使用JSF(面孔上下文)為應用程序創建的。

有一個稱為LoginUtil的類,它通過靜態方法使用戶數據可用於應用程序,例如:getUserId(),getUserEmail()等。每種方法都通過Faces Context獲取HTTP會話,以檢索先前在登錄時保存的用戶數據。

現在,我們有了一些正在使用Spring Boot的新應用程序,因此,LoginUtil類不再起作用。

我想要建議更改LoginUtil類以使其可在任何應用程序中使用。 起初,我的想法是刪除面孔上下文並使用純會話對象,但是由於該方法是靜態的,因此我將無法在其中使用普通變量。 我不能使用靜態變量,因為應用程序將部署在群集服務器中。

有任何想法嗎?

你的第一個想法不是那么瘋狂

ContextFaces,使用threadlocal進行請求,

您可以執行相同的操作,使用servlet過濾器為每個請求創建一個ThreadLocal,然后將theadlocal放在loginuser中,這將適用於每個應用程序

class LoginUtil {
 private static final ThreadLocal<UserInformation> userInfo = new ThreadLocal();

void setUserInfo(UserInformation user){

 userInfo.set(user);
 }


}

class UserInformation{
 HttpSession session;

UserInformation(HttpSession session){
 this.session = session;
}
}

@WebFilter()
class FilterFoo implements Filter{

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
  try{
   LoginUtil.setUserInfo(new UserInformation(request.)
  chain.doFilter(((HttpServletRequest)request).getSession(),response);
  }finally{
   LoginUtil.setUserInfo(null);
  }
} 

暫無
暫無

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

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