Tôi đang làm việc trên mã cũ và cần tạo một bản vá.Sửa đổi phần thân HttpServletRequest
Sự cố: ứng dụng cũ gửi yêu cầu HTTP POST xấu. Một trong các tham số không phải là URL được mã hóa. Tôi biết rằng tham số này luôn luôn đến cuối cùng và tôi biết tên của nó. Tôi đang cố sửa nó ở phía máy chủ đang chạy bên trong tomcat.
Thông số này không thể truy cập thông qua phương thức getParameter chuẩn của HttpServletRequest, vì nó không đúng định dạng. Phương thức đơn giản trả về null. Nhưng khi tôi đọc toàn bộ phần thân yêu cầu thông qua ServletInputStream thì tất cả các tham số khác biến mất. Có vẻ như các lớp cơ bản không thể phân tích cú pháp nội dung của ServletInputStream kể từ khi nó thoát ra ngoài.
Cho đến nay tôi đã quản lý để tạo một trình bao bọc đọc tất cả các tham số từ nội dung và ghi đè tất cả các phương thức truy cập thông số. Nhưng nếu bất kỳ bộ lọc nào trong chuỗi trước khi tôi sẽ cố gắng truy cập vào bất kỳ tham số nào, mọi thứ sẽ bị phá vỡ vì ServletInputStream sẽ trống.
Tôi có thể tránh được vấn đề này bằng cách nào đó không? Có thể có cách tiếp cận khác không?
Để tóm tắt, Nếu tôi đọc phần thân yêu cầu thô trong bộ lọc, các tham số sẽ biến mất khỏi yêu cầu. Nếu tôi đọc tham số đơn, ServletInputStream sẽ trở thành rỗng và xử lý thủ công sẽ là không thể. Hơn nữa, không thể đọc tham số không đúng định dạng thông qua phương thức getParameter.
Bạn có thể vui lòng cung cấp thêm chi tiết về phân tích cú pháp thông số yêu cầu thủ công không? Không đủ để chỉ ghi đè getInputStream và getReader? –
Ok, tôi đã tra cứu. Tôi đã phải phân tích cú pháp các thông số bởi vì một trong số chúng đã bị hỏng như mô tả trong một câu hỏi. Nếu họ được yêu cầu của bạn tốt, không cần phải làm điều đó. – clorz
Xem tại đây để thực hiện đầy đủ: http://stackoverflow.com/a/1048123/535203 –