grails - Grails/SpringSecurity:在LogoutHandler中获取语言环境

标签 grails spring-security

在grails应用程序中,我成功获取了用户选择的语言(添加到url,“...?lang = xx_XX”),如下所示:

def locale = RequestContextUtils.getLocale(request)

使用springsecurity,并设置了一个特殊的注销处理程序,可以正常工作
grails.plugins.springsecurity.logout.handlerNames = ['securityContextLogoutHandler', 'myLogoutHandler']

我需要在myLogoutHandler中为用户选择语言环境,但以下内容不起作用(它仅显示浏览器的默认语言环境,而不是用户选择的语言环境)
class MyLogoutHandler implements LogoutHandler {
    void logout(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) {
        def locale2 = RequestContextUtils.getLocale(httpServletRequest);
    }
}

我也尝试使用以下方式获取 session 语言环境:
RequestContextHolder.currentRequestAttributes().getProperties()

但这给出了相同的结果,任何人都知道如何从MyLogoutHandler获取语言环境?

最佳答案

解决方法

Spring 安全性似乎已清除了该 session ,但您仍然可以发送参数。

所以在注销页面的 Controller 中,我得到了:

def index = {
    def myParam = "bar"
    redirect(uri: SpringSecurityUtils.securityConfig.logout.filterProcessesUrl + "?foo=" + myParam) // '/j_spring_security_logout'
}

我只是在LogoutHandler中获取参数:
void logout(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) {
    def myParam = httpServletRequest.parameterMap.get("foo")[0]
    ....
}

关于grails - Grails/SpringSecurity:在LogoutHandler中获取语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12512906/

相关文章:

testing - 如何在特定方法中防止@Rollback?

grails - 如何使用Gradle在Grails脚本上删除目录中的文件

grails - 从Grails脚本加载bean

java - 使用Spring Security + WSO2身份服务器的OAuth 2.0

spring-security - 在 Spring MVC 单元测试中模拟匿名认证

mongodb - 如何使用GORM/MongoDB插件在Grails中的域对象中创建一个上限集合

hibernate - 如何在不将扩展类映射到数据库的情况下扩展grails域类?

spring-security - 如何使用 Spring Security 和 OAuth2 保护 Apache Camel rest 端点

spring - 配置 Spring Security 5 Oauth 2 以使用 access_token uri 参数

java - Spring Security 返回 401/403 而不是将用户重定向到登录页面