Trong nhà cung cấp xác thực tùy chỉnh của tôi, tôi có thể lấy đối tượng miền thông qua API dịch vụ của mình, nhưng khi tôi thu thập thông tin từ đối tượng miền này sang đối tượng khác để nhận giá trị nhất định để thực hiện kiểm tra bổ sung, Spring phàn nàn phiên Hibernate không tồn tại: -Gói nhà cung cấp xác thực tùy chỉnh bảo mật Spring với giao dịch
domain.getAnotherDomain().getProperty(); // epic FAIL
tôi có giao dịch AOP sau để quấn tất cả các API dự án của tôi với giao dịch, và tôi chắc rằng nhà cung cấp chứng thực tùy chỉnh của tôi rơi vào mô hình sau: -
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor pointcut="execution(* my.project..*.*(..))" advice-ref="txAdvice" />
</aop:config>
Tôi cũng có bộ lọc OpenSessionInView được cấu hình, nhưng tôi không nghĩ rằng áp dụng cho Spring Security anyway.
Tôi đoán tôi có thể tạo một API dịch vụ cụ thể để thực hiện tất cả các kiểm tra bắt buộc, nhưng tôi tò mò tại sao tôi không thể gói nhà cung cấp xác thực tùy chỉnh của mình với giao dịch thích hợp.
Mọi lời giải thích? Cảm ơn.
Thông báo ngoại lệ là 'không thể khởi tạo một tập hợp vai trò: ss.domain, không phiên hoặc phiên nào bị đóng'. Tôi không muốn thực hiện tìm nạp háo hức trừ khi tuyệt đối cần thiết ... nghĩa là, nếu tôi nhận được giao dịch để gói lớp nhà cung cấp xác thực tùy chỉnh. – limc
Vâng, nếu bạn nạp 'miền' trong một phiên, bạn sẽ không thể tải một cách lười biếng' anotherDomain' từ 'miền' trong một phiên khác. Tôi không chắc chắn đây sẽ là trường hợp của bạn, mặc dù (nó không rõ ràng với tôi từ câu hỏi của bạn). Nhưng bạn có thể cân nhắc sử dụng Hồ sơ tìm nạp, nếu bạn không muốn luôn tải xuống Eager, nhưng bạn biết rằng đôi khi bạn cần. – jpkrohling