2017-06-01 175 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"> 
相关问题