Chúng tôi có một ứng dụng được xây dựng trên Java 1.6 với Spring 3.0.3 sử dụng Spring Security 3.0.5 và triển khai REST API bằng cách sử dụng Spring Web với RestEasy 2.1.0. Tôi cần đặt ứng dụng này (máy chủ) phía sau proxy để chuyển lưu lượng truy vấn HTTPS từ ứng dụng REST API Client sang lưu lượng HTTP. Thay đổi này tạo ra một kịch bản "tên miền chéo" cho yêu cầu đăng nhập: Khách hàng gửi yêu cầu HTTPS để đăng nhập và máy chủ trả lời bằng URL chuyển hướng của HTTP. Hiện nay nó phản ứng với:Làm cách nào để ứng dụng Spring Security chạy sau proxy?
”http://192.168.0.10:8090/index.html;jsessionid=64FD79...86D”
,
những gì tôi cần ở đây là:
”/index.html;jsessionid=64FD79...86D”
Chúng tôi đến với giải pháp làm cho máy chủ để đáp ứng với URL “tương đối” thay vì “ URL tuyệt đối ”. Vì vậy, tôi cố gắng thực hiện một cái gì đó tương tự với tình huống được mô tả ở đây:
tôi đã thiết lập các đậu RedirectStrategy với contextRelative = "true" và ghi đè lên các setter redirectStrategy từ AbstractAuthenticationTargetUrlRequestHandler trong LoginSuccessHandler mở rộng lớp học của tôi và tôi thấy tài sản redirectStrategy cho đối tượng HttpServletResponse được đặt thành true như mong đợi. Vẫn không giải quyết được vấn đề.
Ngoài ra khi thay đổi sở hữu của redirectURLCC HttpServletResponse đối tượng sử dụng encodeRedirectURL ("otherLogin") là bộ cái gì đó như
”http://192.168.0.10:8090/otherLogin”
và nó không phải những gì tôi cần. Tôi cần xóa toàn bộ giao thức + phần ipaddress của URL. Thuộc tính URL của đối tượng phản hồi không thể truy cập được do thay đổi vì nó được thực thi bởi các giao diện Filter và FilterChain.
Vui lòng đề xuất bất kỳ ý tưởng nào. Tôi cho rằng loại điều này nên được giải quyết trong tệp web.xml hoặc auth-AplicationContext.xml không có trong mã.
Trân trọng.