通过webapp的全局变量(Spring)

时间:2013-09-26 15:23:51

标签: java spring spring-mvc

我使用Spring MVC创建了一个webapp。我通过我的调度员serlvet中的拦截器建立国际化,如下所示:

<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="lang" />
</bean>

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="defaultLocale" value="es" />
</bean>

然后我可以在我的控制器中访问当前的语言环境,如下所示:

LocaleContextHolder.getLocale()

哪个很棒,因为我可以随时更改我的语言环境并在任何地方访问当前配置。

现在我想对一些行为类似的自定义变量做同样的事情,因为它们会略微影响我应用的所有行为。 (例如,“可访问”参数表示应该只提供可访问内容的应用程序。)

我知道我可以创建自己的拦截器来拦截任何名为“可访问”的参数,如下所示:

<bean id="localeChangeInterceptor" class="com.myapp.MyInterceptor">
    <property name="paramName" value="accesible" />
</bean>

但有没有办法可以在我的应用程序中访问此值,就像LocaleContextHolder对象使用locale一样?我可以让Spring通过Cookie likeo注入它吗?

1 个答案:

答案 0 :(得分:0)

当你在整个应用程序中说,你的意思是“整个”应用程序(如服务,dao /存储库)还是仅仅是应用程序的Web部分? RequestContextHolder(http://docs.spring.io/spring/docs/3.0.x/javadoc-api/org/springframework/web/context/request/RequestContextHolder.html)会帮助你的案子吗?它有一个选项来检索currentRequestAttributes,它是RequestAttributes接口的一个实现。

我没有亲自尝试过,但RequestAttributes javadoc引用“支持访问请求范围的属性以及会话范围的属性,可选的概念是”全局会话“。”