我有一個現在沒有使用SpringSecurity的Spring MVC應用程序。我爲Hibernate審計日誌寫了一個AuditInterceptor,它需要一種獲取當前登錄用戶的方法。從我在網上可以找到的,最好的方法是通過SpringSecurity的SecurityContextHolder。不過,我現在並不需要其他SpringSecurity功能,我不想重寫當前應用程序如何進行身份驗證或授權。檢索用戶所需的最小SpringSecurity配置
基本上,我所需要的是將登錄用戶存儲到SecurityContextHolder中所需的最小配置數量,並在我的AuditInterceptor中再次取回它。
我第一次嘗試是以下行添加到當前存在的登錄頁面:
Authentication auth = new UsernamePasswordAuthenticationToken(u.getName(), u.getPassword());
SecurityContextHolder.getContext().setAuthentication(auth);
,並添加以下的攔截器:
SecurityContext secureContext = SecurityContextHolder.getContext();
Authentication auth = secureContext.getAuthentication();
Object principal = auth.getPrincipal();
String userName = null;
if (principal instanceof UserDetails) {
UserDetails userDetails = (UserDetails) principal;
userName = userDetails.getUsername();
} else {
userName = principal.toString();
}
這是成功的,但不幸的是不是線程安全的。任何人有任何其他想法?