关灯
回帖奖励 10 安仔币      回复本帖可获得 2 安仔币奖励! 每人限 1 次(中奖概率 60%)
开启左侧

Spring Boot 实现session共享与国际化

[复制链接]
杰哥 发表于 2018-7-23 10:13:03 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
修改pom.xml添加依赖
  1. <dependency>
  2. <groupId>org.springframework.session</groupId>
  3. <artifactId>spring-session-data-redis</artifactId>
  4. </dependency>
复制代码

添加配置类 RedisSessionConfig
@Configuration@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60)//默认是1800秒过期,这里测试修改为60秒public class RedisSessionConfig {}
添加一个控制器类 SessionController 来进行测试
@RestControllerpublic class SessionController { @RequestMapping("/uid")  String uid(HttpSession session) {  UUID uid = (UUID) session.getAttribute("uid");  if (uid == null) { uid = UUID.randomUUID(); }  session.setAttribute("uid", uid);  return session.getId();}}
先访问http://localhost:8083/boot/uid
3.jpeg
然后修改配置文件application.yml
spring: profiles: active: test
重新运行IDEA,test配置文件配置的端口是8085,所以浏览器输入http://localhost:8085/boot/uid
4.jpeg

我们看到两个uid是一样的。
在这里我是使用spring boot redis来实现session共享,你还可以配合使用nginx进行负载均衡,同时共享session。
关于nginx可以参考我的另一篇文章:Nginx详解-服务器集群
spring boot 国际化
在spring boot中实现国际化是很简单的的一件事情。
(1)在resources目录下面,我们新建几个资源文件,messages.properties相当于是默认配置的,当其它配置中找不到记录的时候,最后会再到这个配置文件中去查找。
messages.propertiesmessages_en_US.propertiesmessages_zh_CN.properties
依次在这三个配置文件中添加如下配置值:
msg=我是中国人msg=I'm Chinesemsg=我是中国人
添加完之后,会自动将这几个文件包在一块
5.jpeg
需要注意的是这个命名是有讲究的, messages.properties 部分是固定的,不同语言的话,我们可以在它们中间用_区分。为什么是固定的命名,因为源码是硬编码这样命名的。
2)新建一个配置文件 LocaleConfig
  1. @Configuration
  2. @EnableAutoConfiguration
  3. @ComponentScan
  4. public class LocaleConfig extends WebMvcConfigurerAdapter {
  5. @Bean
  6. public LocaleResolver localeResolver() {
  7. SessionLocaleResolver slr = new SessionLocaleResolver(); // 默认语言 slr.setDefaultLocale(Locale.CHINA); return slr; }
  8. @Bean
  9. public LocaleChangeInterceptor localeChangeInterceptor() {
  10. LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); // 参数名 lci.setParamName("lang"); return lci; }
  11. @Override
  12. public void addInterceptors(InterceptorRegistry registry) {
  13. registry.addInterceptor(localeChangeInterceptor());
  14. }
  15. }
复制代码
3)在控制器中,我们添加测试用的方法
  1. // i18n
  2. @RequestMapping("/")
  3. public String i18n() { return "i18n"; }
  4. @RequestMapping("/changeSessionLanauage")
  5. public String changeSessionLanauage(HttpServletRequest request, HttpServletResponse response, String lang){
  6.      System.out.println(lang);
  7.      LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
  8.     if("zh".equals(lang)){
  9.           localeResolver.setLocale(request, response, new Locale("zh", "CN"));
  10.     }else if("en".equals(lang)){
  11.           localeResolver.setLocale(request, response, new Locale("en", "US"));
  12.     }
  13.    return "redirect:/";
  14. }
复制代码
4)添加视图来展示,在templates下新建文件i18n.html,通过#可以直接获取国际化配置文件中的配置项的值。
  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <meta charset="UTF-8"/>
  5. <title>$Title[        DISCUZ_CODE_82        ]lt;/title>
  6. </head>
  7. <body>
  8.     <a href="/changeSessionLanauage?lang=en">English(US)</a>
  9.     <a href="/changeSessionLanauage?lang=zh">简体中文</a><br />
  10.     <h3 th:text="#{msg}"></h3><h4 th:text="${message}"></h4>
  11. </body>
  12. </html>
复制代码
6.gif




 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 论坛元老

    为论坛做出突出贡献的会员

3关注

33粉丝

47帖子

排行榜
关闭

站长推荐上一条 /1 下一条

官方微信

全国服务热线:

400-0708-360

公司地址:国家西部信息安全产业基地(成都市高新区云华路333号)

邮编:610000    Email:2908503813@qq.com

Copyright   ©2015-2016  安仔IT技术交流论坛Powered by©Discuz!    ( 蜀ICP备11000634号-7 )