從.Net到Java學習第八篇——SpringBoot實現session共用和國際化

來源:互聯網
上載者:User

標籤:一個   學習   pos   http   meta   一件事   targe   展示   ima   

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

然後修改設定檔application.yml

spring:  profiles:    active: test

重新運行IDEA,test設定檔配置的連接埠是8085,所以瀏覽器輸入http://localhost:8085/boot/uid

我們看到兩個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=我是中國人

添加完之後,會自動將這幾個檔案包在一塊

需要注意的是這個命名是有講究的,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共用和國際化

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.