2010-09-02 43 views
7

Tôi có một bean mùa xuân đơn đang được gọi để đáp ứng với một số hành động phía máy khách. Tôi muốn nắm bắt một số thông tin về khách hàng (cụ thể là địa chỉ IP). Tôi cho rằng nguồn thông tin này tốt nhất là đối tượng yêu cầu. Làm thế nào để có được quyền truy cập vào đối tượng yêu cầu từ bên trong bean của tôi?Làm cách nào để truy cập vào ServletRequest từ bên trong một bean lò xo đơn?

Tha thứ cho tôi nếu đây là một câu hỏi rõ ràng, tôi rất mới đến với Spring.

Tôi đã thử một điều mà không thành công .:

((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()) 
.getRequest().getRemoteAddr(); 

Nhưng điều đó thất bại với một IllegalStateException ra khỏi currentRequestAttributes. Các văn bản ngoại lệ cho thấy sử dụng một RequestContextListener hoặc RequestContextFilter

Tôi đã tìm thấy một reference thế nào để cấu hình RequestContextListener, nhưng tôi vẫn không biết phải thay đổi đậu của tôi vì vậy tôi có thể truy cập các thông tin yêu cầu.

Trả lời

7

RequestContextListener được thêm vào web.xml và điều này sẽ liên kết yêu cầu hiện tại với chuỗi hiện tại. Liên kết chuỗi này sau đó được truy xuất qua RequestContextHolder theo cách bạn đã thử.

Vì vậy, chỉ tát RequestContextListener vào web.xml, và mã của bạn chỉ nên bắt đầu làm việc:

<listener> 
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
</listener> 

RequestContextListener không thường được yêu cầu trong ứng dụng Spring MVC, vì DispatcherServlet sẽ làm điều đó tự động. Tôi cho rằng đây không phải là một ứng dụng Spring MVC?

+0

Tuyệt vời, điều này đã hoạt động! Tôi chỉ có tên của RequestContextListener trong web.xml. Các thuộc tính requestDestroyed (ServletRequestEvent) làm gì? – wolfcastle

+0

Đúng, đây không phải là ứng dụng Spring MVC. Xin lỗi, không thấy rằng lần đầu tiên tôi đọc câu trả lời của bạn. – wolfcastle

Các vấn đề liên quan