在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/