java - Keep locale on Spring Security session timeout -



java - Keep locale on Spring Security session timeout -

i'm using spring security 3.0.2 , have config

<security:form-login login-processing-url="/resources/j_spring_security_check" login-page="/login" authentication-failure-handler-ref="autherrorhandler" authentication-success-handler-ref="authcorrecthandler" /> <security:logout logout-success-url="/index.jsp" invalidate-session="false" /> <security:remember-me /> <security:session-management invalid-session-url="/login/sessionexpired" > <security:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" /> </security:session-management>

when login locale, went when expiring session, spring security clear session , create new anonymous session locale default (and go login page expected). result user locale lost.

how can maintain user locale when expiring session in spring security 3.0.2?

i'm using localechangeinterceptor set locale, this:

<bean id="localechangeinterceptor" class="org.springframework.web.servlet.i18n.localechangeinterceptor"> <property name="paramname" value="language" /> </bean>

and sessionlocaleresolver locale resolver:

<bean id="localeresolver" class="org.springframework.web.servlet.i18n.sessionlocaleresolver"> <property name="defaultlocale" value="es" /> </bean> edit - solved needs

i've solved setting cookie in own localechangeinterceptor extends handlerinterceptoradapter, writing in prehandle method:

localeresolver localeresolver = requestcontextutils.getlocaleresolver(request); if (localeresolver == null) { throw new illegalstateexception("no localeresolver found."); } cookie mylang = new cookie("mylang", locale.getlanguage() + "_" + locale.getcountry()); mylang.setmaxage(86400); response.addcookie(mylang); localeresolver.setlocale(request, response, locale);

and in /sessionexpired controller point, i'm getting cookie value:

public string sessionexpired(httpservletrequest request, httpservletresponse response, model model, @cookievalue(value = "mylang", defaultvalue = "es_es") string mylang) throws exception { model.addattribute("mylang", mylang); localeresolver localeresolver = requestcontextutils.getlocaleresolver(request); stringtokenizer st = new stringtokenizer(mylang, "_"); string language = ""; string country = ""; seek { language = (string) st.nextelement(); country = (string) st.nextelement(); } grab (exception e) { throw new exception("error locale"); } locale locale = new locale(language, country); localeresolver.setlocale(request, response, locale); homecoming "sessionexpired";

no need utilize database temporal storage in case.

logically not can utilize session maintain track of locale. locale set using request param language cleared session. when new session created locale defaulted es given localeresolver. 1 way think store user preferences in db , retrieve there on subsequent log-ins

also suggested @m. deinum:

if ok cookies utilize cookielocaleresolver persists selection in cookie. else implement own localeresolver stores/retrieves database.

java spring java-ee spring-mvc spring-security

Comments

Popular posts from this blog

model view controller - MVC Rails Planning -

ruby on rails - Devise Logout Error in RoR -

html - Submenu setup with jquery and effect 'fold' -