2017-06-01 100 views
0

在我的Grails 3.2.9 web-app中,我使用Spring Security插件來管理用戶會話。這是depencency:Grails 3和Spring Security:當用戶未登錄時返回401

compile "org.grails.plugins:spring-security-core:3.1.1" 

帶到在所有控制器基本上所有操作的應用程序的自然(年之久)演進,使用@Secured註釋,返回一個JSON大多是無抵押,像

return map as JSON // grails.converters.JSON 

這意味着所有操作基本上都像API一樣。

但由於它們是安全的,所以當用戶沒有登錄時,重定向被執行到/login/auth(登錄頁面),這是你不會期望的。這就是爲什麼我正在尋找一種方法來返回401 unauthorized狀態,而不是讓Spring Security執行重定向。

到目前爲止,我看着pessimistic lockdown,並在網絡上搜索也導致我Spring Security Core REST plugin,但兩種方式似乎並不適應我的情況(在最後給我,但也許我失去了一些東西) 。

因此,任何建議,歡迎提前致謝!

回答

0

註冊下面的resources.groovy

authenticationEntryPoint(Http401AuthenticationEntryPoint, 'Bearer')

+0

此,像變魔術一樣! :D沒辦法,我將能夠得到這個解決方案。實際上,經過一些研究後,對於我來說還是有些模糊,可以請你提供一個參考,你認爲這是最適合這種情況的嗎?這真的會有所幫助 – ilPittiz

+0

請將答案標記爲已接受。我沒有參考。我查看了源代碼是如何工作的,並且做了合適的事情 –

0

我沒有Grails的經驗,但是您的Spring安全配置中提供了org.springframework.security.web.AuthenticationEntryPoint的不同實現,可能會實現您正在尋找的內容。默認情況下,表單身份驗證Spring使用org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint執行重定向到給定的登錄頁面。另一方面,org.springframework.security.web.authentication.HttpStatusEntryPoint只是返回所需的狀態。

在我們的項目的切入點是通過XML配置設置的老式方法:

<http pattern="/**" auto-config="false" entry-point-ref="yourAuthenticationEntryPoint"> 
相關問題