2012-09-20 164 views
0

在一個Grails應用程序,我成功地讓用戶選擇的語言(添加到URL, 「...... LANG = xx_XX?」)是這樣的:的Grails/SpringSecurity:獲取語言環境LogoutHandler

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); 
    } 
} 

我也試圖讓會議現場有:

RequestContextHolder.currentRequestAttributes().getProperties() 

但給出了相同的結果,任何人有一個想法,如何讓來自MyLogoutHandler的語言環境?

回答

1

解決方法

會議似乎是由彈簧安全清零,但你仍然可以在發送參數。

所以在控制器登出頁面我:

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] 
    .... 
} 
+0

也在2.3.6中工作,但需要在'plugins'中使用'grails.plugin.springsecurity.logout.handlerNames'而不用's' – Guus

0

我可以使用下面的代碼獲得區域設置:

+0

我LogoutHandler使用request.locales.each()只打印(en_US和en),我懷疑這只是在請求中向我的瀏覽器發送的語言環境。它不顯示用戶在會話中設置的區域設置 – klogd

+0

啊對不起!我讀了你的問題不正確,我的道歉.. – Marco