我有一个Web应用程序,其中包含一个REST api,该API与生活在/
的客户端应用程序进行了交互。当用户 session 超时并且客户端js应用程序向REST api发送请求时,该请求将触发登录事件。用户登录后,用户将被带到REST api端点,该端点仅显示JSON响应。我想强制登录页面始终重定向到/
。
编辑1:我也将spring-security-core插件与openid插件一起使用,并且grails 2.0.4。
编辑2:所以我设法找到了一个解决方案,但是它有点粗糙,我想知道那里是否有一个更优雅的解决方案。
我在grails-app/conf/LoginRedirectFilters.groovy
中创建了一个简单的过滤器:
class RedirectLoginFilters {
def filters = {
redirectAfterLogin (uri: '/api/*') {
before = {
if (session["LOGGING_IN"])
redirect uri: "/"
}
after = {
if (session["LOGGING_IN"])
session["LOGGING_IN"] = false
}
}
}
}
在
auth
里面的OpenIdController.groovy
函数中,我添加了 session 标志LOGGING_IN
:def auth = {
def config = SpringSecurityUtils.securityConfig
if (springSecurityService.isLoggedIn()) {
redirect uri: config.successHandler.defaultTargetUrl
return
}
session["LOGGING_IN"] = true
.
.
.
通过仅在调用api端点时检查
LOGGING_IN
标志是否为true才能正常工作,并且在一个请求之后它也会杀死该标志,因此不会干扰后续的客户端api调用。我知道这很复杂,因此,如果有更好的解决方案,请告诉我,谢谢!
最佳答案
为什么也不能在过滤器中使用相同的“springSecurityService.isLoggedIn()”?我很确定也可以。
关于grails - 停止触发登录的已保存请求,始终重定向到 `/`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11963201/