Spring Boot 2系列(二十八):Spring Session 集成配合Redis实现Session集群共享

  Web应用的 Session 默认是由服务器容器(如:Tomcat)管理,当部署服务器集群时,会出现在服务器A登录后,再次访问被负载均衡转发到服务器B时会被要求重新登录,这对访问同一个域名站点用户来说是非常不友好的体验,登录服务器的 Session 无法被集群中的其它服务器共用, 这就是集群环境下的 Session 共享问题。

解决集群环境下的 Session 问题的思路基本有三种:
  1. 服务器 Session 复制:让集群中每台服务器都有其它服务器的Session, 这是服务器Session复制机制。
  2. 持久化 Session:自定义 Session管理实现,接管容器对Session的管理,把 Session 持久化提供公共使用,每次请求根据 SessionId到 Session 缓存服务器取 Session 进行判断。
  3. 在负载均衡服务器配置粘性 Session:即把同一个 Session 的多个访问始终绑定到同一台服务器,不推荐使用, 当该服务器宕机机就会出现 Session 丢失,没有利点集群的优势。

  目前行业广泛使用且推荐使用的是持久化Session,对Session 执行统一的存储和访问,实现 Session 在集群服务中的共享。

阅读更多

Spring Boot 2系列(二十七):Listener, Filter, Interceptor

  Listener 监听器,Filter 过滤器,Interceptor 拦截器是 Java Web领域非常重要的三大神器(组件),会经常使用到。

  关注这三个的知识点本篇不做描述,主要记录在Spring Boot框架中这三大组件的使用。

  前面文章也有提到:Spring事件监听,SpringMVC之HandlerInterceptor拦截器, Spring Boot实践系列(二十二):Web相关配置详解

  官方文档:Spring Boot -> Application Events and Listeners,Spring Boot -> Servlets, Filters, Listeners, Spring Boot -> Add a Servlet, Filter, or Listener to an Application

阅读更多

Spring Boot 2系列(二十五):WebSocket详解与使用

  Spring Boot为内嵌的Tomcat 8.5,Jetty 9和Undertow提供了 WebSockets 自动配置。 如果打包 war 文件部署到独立容器,则Spring Boot会认为容器负责其对WebSocket支持的配置。

  Spring Framework提供了丰富的WebSocket支持,可以通过spring-boot-starter-websocket模块轻松的集成使用。

  Spring Boot -> WebSockets, Spring Framework -> Web on Servlet Stack -> WebSockets

阅读更多

Spring Boot 2系列(二十四):内嵌Tomcat SSL配置

  现在https的请求链接已非常普遍了,https可理解为 http的安全版,是基于 http 下加入了SSL(Secure Sockets Layer 安全套接层)层,为数据通讯提供安全支持。

  SSL 配置是基于服务端的,Nginx 和 Tomcat 都可以配置 SSL,SSL证书可以自己通过JDK工具生成,也可以购买认证的证书。

  SSL 协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等(- -百度百科)。

  Java Web 项目的部署环境通常在 Servlet容器(Tomcat)外面一层使用 Nginx 来做返向代理,在 Nginx 服务器里面配置 SSL 并将 HTTP 重定向到 HTTPS,或者在 Tomcat 容器里配置 SSL,将HTTP 请求重定向 到 HTTPS。

  本篇针对 Spring Boot 内嵌 Tomcat 配置 SSL 进行讲解,实际使用可能并不多,但可以了解Spring Boot 内嵌 Tomcat 对 SSL 的支持和配置。

阅读更多

Spring Boot 2系列(二十三):自动配置之@Conditional条件注解

  要理解 Spring Boot 的自动配置,就必须先理解 Spring 的 @Conditional注解,在自动配置类中常看到该注解的使用。

  该注解指定了在什么条件下创建 Bean 进行配置。 Spring Boot包含多个 @Conditional 注释,可以在@Configuration注解的类和@Bean注解方法中使用。

  @Conditional类型的注解,可以注解在类上,可以注解在Bean方法上,可以允许基于Spring Environment属性包含配置,可以仅允许在存在特定资源时包含配置。

  官方文档 -> Spring Boot自动配置之条件注解

  也可自定义,通过实现Condition接口,并重写其matches方法来构造判断条件。

阅读更多

Spring Boot 2系列(二十二):Web 静态资源,跨域,消息转换器,拦截器,监听器,过滤器等相关配置

  Spring Boot对 Web 项目提供了很好的支持,对视图解析、静态资源、格式化和转器器、消息转换器提供了自动配置,自动映射了静态首页。

  Web 相关自动配置在 Spring Boot 自动配置包(org.springframework.boot:spring-boot-autoconfigure.2.0.0.RELEASE)里 Web 路径下:org.springframework.boot.autoconfigure.web。在该路径下可以看到提供了Web相关的自动配置,如 RestTemplate, embedded(内嵌的应用服务器:jetty,tomcat,undertow), format,reactive,Servlet等。

阅读更多

Spring Boot 2系列(二十一):RestTemplate 远程调用 REST 服务

  互联网项目经常存在远程调用的情况,如果调用的是 REST 远程服务,可以使用 Spring Web 提供的RestTemplate.

  RestTemplate 是原始的 Spring REST 同步请求客户端,通过 HTTP 客户端提供更高级别的 API,使得调用 REST 端点变更更容易。

  Spring Boot 没有自动配置 RestTemplate,但自动注册了 RestTemplateBuilder Bean,用于构建 RestTemplate,并且 HttpMessageConverters 会自动应用到 RestTemplate 实例中。

  如果是 WebFlux 项目,可以使用 WebClient 来远程调用 REST 服务,相比 RestTemplate,WebClient 拥有更多的功能,并且是完全响应式, 后续再对 WebClient 进行详解。

  Spring Boot > Calling REST Services with RestTemplateSpring Framework > Using RestTemplate

阅读更多

Spring Boot 2系列(二十): 配置文件加载及参数绑定

  Spring Boot提倡的是零配置,提供了强大的自动配置功能;只要装配了相应的功能,默认就会启用通用的配置(习惯优于配置)。

  但实际开发中,除了默认的配置外,根据需求难免需要定制配置文件;SpringBoot默认的配置文件application.properties会被自动加载,但定制的配置文件则需要我们自己手动加载。

  SpringBoot加载配置文件是将文件内容读取到Spring容器中,目的是为了给Spring容器中的上下文对象调用,达到一次加载,随处调用。

阅读更多