Tôi đang sử dụng Jersey 1.4 ea cùng với Spring 3.0 và tích hợp jersey-spring
. Việc tích hợp Jersey và Spring hoạt động tốt đối với các lớp tài nguyên như được mô tả here. Làm thế nào tôi muốn tiêm một thành phần mùa xuân vào một ContainerRequestFilter để thực hiện một số xử lý trước các yêu cầu.Jersey: Đưa thành phần Spring vào ContainerRequestFilter
@Component
public class SecurityFilter implements ContainerRequestFilter {
// UserManager is a declared spring component
// Injecting it should work somehow
@Autowired
private UserManager userManager;
@Override
public ContainerRequest filter(ContainerRequest request) {
System.out.println(userManager);
// prints out null on request
}
}
Cả bộ lọc lẫn bean quản lý người dùng được đăng ký khi tôi triển khai ứng dụng cho Glassfish. Tôi tự hỏi tôi đang làm gì sai. Có cách nào để tiêm một bean quản lý mùa xuân vào một ContainerRequestFilter?
CẬP NHẬT
Loại giải quyết. Vấn đề là Jersey không có được Spring bean nếu các bean này là các proxy Java (trái ngược với các lớp proxy được tạo ra). Vấn đề có thể được giải quyết bằng cách hướng dẫn Spring để LUÔN LUÔN sử dụng các lớp proxy thay vì Java Proxies bằng cách xác định thuộc tính proxy-target-class="true"
trong các phần tương ứng của cấu hình lò xo. Trong kịch bản của tôi, tôi phải xác định nó trên <tx:annotation-driven proxy-target-class="true" />
.
Xem here để có phân tích chi tiết hơn và có thể khắc phục được điều đó.
Trong giải pháp của bạn, cách SecurityFilter được đăng ký trong tệp web.xml hoặc ở một nơi khác? Tôi có một vấn đề ở đây https://stackoverflow.com/q/45509183/4636715 trong đó ContainerRequestFilter không được truy cập ở tất cả. – vahdet