纵有疾风起
人生不言弃

从.Net到Java学习第八篇——SpringBoot实现session共享和国际化

从.Net到Java学习系列目录

SpringBoot Session共享

修改pom.xml添加依赖

        <!--spring session-->        <dependency>            <groupId>org.springframework.session</groupId>            <artifactId>spring-session-data-redis</artifactId>        </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

从.Net到Java学习第八篇——SpringBoot实现session共享和国际化插图

然后修改配置文件application.yml

spring:  profiles:    active: test

重新运行IDEA,test配置文件配置的端口是8085,所以浏览器输入http://localhost:8085/boot/uid

从.Net到Java学习第八篇——SpringBoot实现session共享和国际化插图1

我们看到两个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 Chinese
msg=我是中国人

添加完之后,会自动将这几个文件包在一块

从.Net到Java学习第八篇——SpringBoot实现session共享和国际化插图2

需要注意的是这个命名是有讲究的,messages.properties部分是固定的,不同语言的话,我们可以在它们中间用_区分。为什么是固定的命名,因为源码是硬编码这样命名的。

(2)新建一个配置文件LocaleConfig

@Configuration@EnableAutoConfiguration@ComponentScanpublic class LocaleConfig extends WebMvcConfigurerAdapter {    @Bean    public LocaleResolver localeResolver() {        SessionLocaleResolver slr = new SessionLocaleResolver();        // 默认语言        slr.setDefaultLocale(Locale.CHINA);        return slr;    }    @Bean    public LocaleChangeInterceptor localeChangeInterceptor() {        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();        // 参数名        lci.setParamName("lang");        return lci;    }    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(localeChangeInterceptor());    }}

(3)在控制器中,我们添加测试用的方法

    //    i18n    @RequestMapping("/")    public String i18n() {        return "i18n";    }    @RequestMapping("/changeSessionLanauage")    public String changeSessionLanauage(HttpServletRequest request, HttpServletResponse response, String lang){        System.out.println(lang);        LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);        if("zh".equals(lang)){            localeResolver.setLocale(request, response, new Locale("zh", "CN"));        }else if("en".equals(lang)){            localeResolver.setLocale(request, response, new Locale("en", "US"));        }        return "redirect:/";    }

(4)添加视图来展示,在templates下新建文件i18n.html,通过#可以直接获取国际化配置文件中的配置项的值。

<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head>    <meta charset="UTF-8"/>    <title>$Title$</title></head><body><a href="/changeSessionLanauage?lang=en">English(US)</a><a href="/changeSessionLanauage?lang=zh">简体中文</a><br /><h3 th:text="#{msg}"></h3><h4 th:text="${message}"></h4></body></html>

(5)运行查看效果

从.Net到Java学习第八篇——SpringBoot实现session共享和国际化插图3

文章转载于:https://www.cnblogs.com/jiekzou/p/9214151.html

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 从.Net到Java学习第八篇——SpringBoot实现session共享和国际化
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录