1
從@Repository
bean訪問Spring Security上下文安全嗎?Spring安全上下文和@Repository bean
讓我們說,我們有一些@Repository
:
public interface FooRep {
Foo getFoo();
}
@Repository
public class FooRepImpl {
public Foo getFoo() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return (Foo)authentication.getDetails();
}
}
它包裝成服務層:
public interface FooService {
Foo getFoo();
}
@Service
public class FooServiceImpl {
@Autowired FooRep fooRep;
public Foo getFoo() {
return fooRep.getFoo();
}
}
讓我們說,這種方法是從安全控制器訪問,類似的東西:
@RestController
@Secured
public void FooController {
@Autowired FooService fooSer;
@RequestMapping("/foo");
public Foo getFoo() {
return fooSer.getFoo();
}
}
這是一個非常簡化的例子,但基本的pa邏輯的rt在這裏。
請不要問我爲什麼需要它,不要給我建議如何重構這個架構。
我只需要知道,它是否會導致與多線程使用有關的任何問題?
問題出現了,因爲我們遇到了authentication.getDetails()
包含的Foo
實例與驗證攔截器中放置的實例不同的情況。這很奇怪,看起來不可能。
不好意思,你描述的場景如何與我提供的場景(Controller - > Service - > Repository)一致? – Andremoniy
在簡單的情況下,它很好,但你問了關於多線程。我描述了潛在的問題。通常情況下,保留圖層比較好,以便您可以從控制器獲取身份驗證,並將其傳遞到服務器,並作爲參數傳遞給存儲庫,而不是直接訪問。 – StanislavL