2011-01-31 36 views
5

Chúng tôi đang sử dụng Bảo mật mùa xuân để quản lý xác thực. Vấn đề chúng ta đang thấy là khi phiên của người dùng hết thời gian giữa việc đưa lên biểu mẫu GET và nhấn nút lưu mà POST, chúng được gửi đến trang đăng nhập nhưng mùa xuân đang lưu thông tin bài đăng ban đầu trong phiên.Vô hiệu hóa logic lưu trữ SavedRequest của SpringSecurity

Ứng dụng của chúng tôi không đưa chúng trở lại URL ban đầu sau khi đăng nhập, nhưng thay vào đó hãy gửi chúng trở lại trang bắt đầu chung. Điều này làm việc tốt, nhưng khi người dùng xảy ra để trở về trang mà họ đã cố gắng POST tới (biểu mẫu GET và POST là cùng một URL) Spring cố gắng gửi lại POST tự động mà không phải là những gì chúng ta muốn.

Có cách nào để vô hiệu hóa hoàn toàn logic lưu trữ SavedRequest trong Spring không?

+0

Nếu phiên giao dịch đã timed out, nơi được yêu cầu lưu đến từ đâu? – sourcedelica

+0

Mùa xuân dường như đang lưu yêu cầu đăng xuất trước khi đăng ký ở đâu đó mới? phiên vẫn nhận được nó. Dường như nó được truy cập bởi AbstractProcessingFilter.SPRING_SECURITY_SAVED_REQUEST_KEY –

Trả lời

3

Tôi đoán số this jira vấn đề bảo mật mùa xuân mô tả sự cố của bạn và cách xử lý vấn đề này.

+1

Cảm ơn, tôi không thể tìm thấy vấn đề jira đó. Có vẻ như cấu hình tôi cần thêm là:

+0

Có cấu hình tương tự cho bảo mật mùa xuân 2.0.5 không? ExceptionTranslationFilter không có requestCache –

0

Dường như các phiên cố định bảo vệ = "newSession" thuộc tính trên (2.0) hoặc (3.0) cũng sẽ giải quyết vấn đề

1

Có hai kịch bản: 1) Nếu bạn muốn rằng sau khi đăng nhập lại, người sử dụng nên thường xuyên được chuyển tiếp đến URL mục tiêu mặc định thay vì URL được yêu cầu ban đầu sau đó đưa luôn sử dụng mặc định-target = "true" trong security.xml của bạn như

<http auto-config="true"> 
..... 
<form-login login-page="/login" always-use-default-target="true" default-target-url="/xyz" 
     authentication-failure-url="/login?error=true" login-processing-url="/j_security_check"/> 
</http> 

1) Nếu bạn muốn điều đó trên phiên hết thời gian chờ sau khi relogin, người dùng nên chuyển tiếp đến URL được yêu cầu ban đầu nhưng bạn không muốn gửi lại biểu mẫu rồi đặt phiên-fixation-protection = " newSession "trong security.xml của bạn như

<http auto-config="true"> 
<session-management session-fixation-protection="newSession"/> 
..... 
</http> 

Vui lòng đặt thẻ quản lý phiên làm dòng đầu tiên trong cấu hình http.

0

Dựa trên nhận xét của Nathan trên Raghuram's answer, với XML namespaced nó là cái gì như thế này:

<security:http> 
    <security:request-cache ref="nullRequestCache" /> 
    <!-- ... --> 
</security:http> 

<bean id="nullRequestCache" class="org.springframework.security.web.savedrequest.NullRequestCache" /> 
Các vấn đề liên quan