grails - 停止触发登录的已保存请求,始终重定向到 `/`

标签 grails grails-2.0

我有一个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/

相关文章:

grails - 映射遗留表和多个 hasMany 关联

Grails 条件可空验证或具有可空选项的自定义验证器

hibernate - Grails的交易范围?

java - 从 Java/Groovy 批量加载 MongoDB 数据库进行测试

Grails/Groovy log4j - 记录行号、方法名和类名

grails - 如何根据拒绝访问的原因使Grails的Spring Security Core呈现不同的页面

grails - Grails-将Joda日期呈现为JSON时发生异常

testing - 新 grails 应用程序的功能测试框架的优点和缺点是什么?

Grails:Spring Security CAS 在 2.2.3 中工作,但在 2.3.0 中不起作用

grails - Grails远程功能和Ajax