[英]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.