我用SecurityContextHolder
和一個自定義UserDetailsService
從SecurityContextHolder
獲得UserDetails
:SecurityContextHolder線程安全嗎?
Object o = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetailsDTO user = (UserDetailsDTO) o;
我離開了null檢查,等等,但是這是想法。我在@Around
切入點的@Aspect
的使用這樣的:
@Around("execution(* user.service.*.*(..))")
public Object audit(ProceedingJoinPoint call) throws Throwable {
// get user id
// add audit row in db
}
望着SecurityContextHolder
類,它採用了ThreadLocal
默認,但在切入點的東西似乎也有某種形式的封裝線程邏輯。
是否有可能存在用戶衝突(即,在另一個併發會話中訪問來自一個會話的UserA審覈事件),或者可能是一個空用戶。
有沒有更好的方法來獲取憑證/用戶配置文件?
我看到了,但這對於春天的傢伙來說似乎是一個巨大的錯誤。一個靜態的util類,setStrategyName有這個Javadoc blurb:'不要爲給定的JVM多次調用這個方法,因爲它會重新初始化策略,並使用舊的策略對任何現有的線程產生不利影響。'我想我可能會最終創建一個單例包裝類。 – Droo 2010-02-19 01:12:00
我想這裏還有一個系統屬性:'public static final String SYSTEM_PROPERTY =「spring.security.strategy」;' – Droo 2010-02-19 01:53:11