2016-04-01 26 views
8

Tôi đang sử dụng bảo mật mùa xuân với REST và tôi đang sử dụng URL (/logout) làm điểm cuối cho phương thức đăng xuất của mình. Nhưng sau khi gọi phương pháp này, nó chuyển hướng tôi đến (/login?logout), tôi biết đây là mùa xuân logOutSuccessUrl. Và tôi muốn thoát khỏi sự chuyển hướng. Đây là mã của tôi:Bảo mật mùa xuân - Tắt chuyển hướng đăng xuất

protected void configure(HttpSecurity http) throws Exception { 

    http.authorizeRequests() 
     .antMatchers("/login").permitAll() 
     .anyRequest().fullyAuthenticated() 
     .and().requiresChannel().anyRequest().requiresSecure() 
     .and().httpBasic().disable().logout() 
     .disable() 
     // .logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK)) 
      .csrf().disable(); 

} 

Tôi cố gắng để sử dụng HttpStatusReturningLogoutSuccessHandler nhưng nó đã không làm việc, và thậm chí thiết lập logoutSuccessUrl() không thay đổi bất cứ điều gì.

Bạn có biết làm cách nào để vô hiệu hóa chuyển hướng này?

Trả lời

2

Sử dụng phương pháp này:

.logout().logoutSuccessUrl("enter address here where you want to go after logout") 
+1

OP muốn thoát khỏi chuyển hướng khi/logout đang được gọi từ một máy khách REST (có thể là yêu cầu AJAX từ trình duyệt) –

+1

Tôi đã thử điều này, vẫn có chuyển hướng – uncallable

13

Tiếp theo đang làm việc cho tôi (lưu ý rằng nó không có logout().disable())

http.logout().permitAll(); 
http.logout().logoutSuccessHandler((new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK))); 
+0

Tôi đã thử điều này, vẫn có chuyển hướng – uncallable

+1

Thử đặt mức ghi nhật ký của sp nhẫn an ninh để gỡ lỗi, nó có thể cung cấp cho bạn một gợi ý. Nếu sử dụng khởi động mùa xuân, bạn có thể thêm 'logging.level.org.springframework.security = DEBUG' vào application.properties –

+0

@uncallable Bạn có làm nó hoạt động không? Tôi đang gặp vấn đề tương tự. Đã thử tất cả các giải pháp, không có gì hoạt động. – ddd

0

Foo những người sử dụng cấu hình XML, đây là tương đương cho đoạn cho cái được đưa ra bởi Tahir Akhtar.

Trong <http> yếu tố, cấu hình các yếu tố <logout> như sau:

<logout 
    logout-url   = "/some/path/for/logout" 
    invalidate-session = "true" 
    delete-cookies  = "JSESSIONID" 
    success-handler-ref = "httpStatusReturningLogoutSuccessHandler" 
/> 

Và xác định httpStatusReturningLogoutSuccessHandler đậu như sau:

<bean 
    id  = "httpStatusReturningLogoutSuccessHandler" 
    class = "org.springframework.security.web.authentication.logout.HttpStatusReturningLogoutSuccessHandler" 
/> 
1

Bạn có thể muốn thử loại này

http.logou t(). logoutRequestMatcher (new AntPathRequestMatcher ("/ thisistomisleadlogoutfilter"));

Điều này có hiệu quả chuyển hướng/thisistomisleadlogoutfilter để đăng nhập? Đăng xuất. Như vậy bạn sẽ có thể sử dụng/logout thay

3

Vì vậy, vì không có câu trả lời chấp nhận nêu ra, tôi gửi giải pháp của tôi, mà làm việc cho tôi:

.logout() 
.logoutUrl("/api/user/logout") 
.permitAll() 
.logoutSuccessHandler((httpServletRequest, httpServletResponse, authentication) -> { 
    httpServletResponse.setStatus(HttpServletResponse.SC_OK); 
}) 
.and() 

Chỉ cần trả về một HTTP_OK sạch (200) sau khi đăng xuất thành công - spring sẽ không chuyển hướng bạn trong trường hợp này

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