使用 Spring Security 和 Grails 注销后如何将用户重定向到不同的页面

Posted

技术标签:

【中文标题】使用 Spring Security 和 Grails 注销后如何将用户重定向到不同的页面【英文标题】:How to redirect user to different pages after logout with Spring Security and Grails 【发布时间】:2015-08-17 03:08:15 【问题描述】:

我是 Groovy 和 Grails 的新手。我使用 Spring Security 插件使用数据库请求的请求映射开发了一个应用程序。我想根据角色在注销后自定义重定向到主页。

如果用户是 ROLE_ADMIN,注销后他将被重定向到他的主页视图 adminUser/Homepage.gsp

如果用户是 ROLE_USER,注销后他将被重定向到他的主页视图 User/Homepage.gsp

我无法根据用户角色获得任何自定义身份验证重定向。

【问题讨论】:

我猜你必须创建一个自定义注销方法,如果你可以使用SecurityContextHolder.clearContext() 以编程方式注销用户,然后根据那里的角色重定向用户 还有创建自定义注销处理程序的选项,您可以点击此链接grails-plugins.github.io/grails-spring-security-core/guide/… @AnantKolvankar - ***.com/questions/5727380/… 这解决了我...感谢您帮助我 我已经发布了一个答案如果您认为它有帮助,请接受:) 【参考方案1】:

你有两个选择

1) 创建自定义注销方法,您可以使用SecurityContextHolder.clearContext() 以编程方式注销用户,然后根据 ROLES 重定向用户

2) 创建自定义注销处理程序,点击此链接https://grails-plugins.github.io/grails-spring-security-core/guide/logoutHandlers.html

【讨论】:

【参考方案2】:

我正在发布我的解决方案,非常感谢您的帮助。这种方法简单易行,您只需从注销控制器的请求变量中调用注销方法即可。

def roles = SpringSecurityUtils.getPrincipalAuthorities()

        for (String role in roles) 
            if (role.equals("ROLE_ADMIN")) 
                request.logout()
                redirect uri : "/admin/logoutPage"
            
            else if (role.equals("ROLE_USER")) 
                request.logout()
                redirect uri : "/user/logoutPage"
            
            else 
                request.logout()
                redirect uri : "/"
            
        

【讨论】:

以上是关于使用 Spring Security 和 Grails 注销后如何将用户重定向到不同的页面的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Security 模拟身份验证和授权

如何使用 Spring-Security 3 和 Hibernate 4 将 spring security xml 配置 hibernate 转换为 java config

Spring Framework,Spring Security - 可以在没有 Spring Framework 的情况下使用 Spring Security?

使用 Spring 和 Spring Security 正确注入 SessionFactory

如何使用spring-security通过用户名和密码登录?

Spring 框架 4.0 和 Spring security 3.2.4 上的 Spring Security SAML 扩展