欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring session實現(xiàn)共享單點登錄案例過程解析

 更新時間:2020年07月01日 09:22:34   作者:明月之詩  
這篇文章主要介紹了Spring session實現(xiàn)共享單點登錄案例過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

  一、項目構建

  1、案例說明

  本文主要演示單點登錄功能,會貼出主要配置和代碼以及必要解釋,全部代碼請參考git地址。session共享一個基本原則是將session存儲在某個地方,所有的應用都可以訪問,這里使用redis存儲session。當應用需要認證時,先從redis讀取用戶信息。

  2、基本配置

  1)pom.xml

<dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session</artifactId>
  <version>1.3.1.RELEASE</version>
</dependency>

  2)application.properties

server.port=8080
spring.session.store-type = redis
spring.redis.host=192.168.7.151
spring.redis.port=6379

  本案例的兩個應用完全一樣,一個端口是8080,一個端口是80

  3、代碼變動

  1)新增SimpleImageCode.java

public class SimpleImageCode implements Serializable{

  private static final long serialVersionUID = 1L;
  private String code;
  private LocalDateTime expireTime;
  
  public SimpleImageCode(String code,LocalDateTime expireTime) {
    this.code = code;
    this.expireTime = expireTime;
  }
  public String getCode() {
    return code;
  }
  public void setCode(String code) {
    this.code = code;
  }
  public LocalDateTime getExpireTime() {
    return expireTime;
  }
  public void setExpireTime(LocalDateTime expireTime) {
    this.expireTime = expireTime;
  }
  public boolean isExpried() {
    return LocalDateTime.now().isAfter(expireTime);
  }
}

  該類與ImageCode.java基本一樣,區(qū)別1:實現(xiàn)了Serializable接口;區(qū)別2:沒有BufferedImage屬性。原因是圖形驗證碼要放入session中,而session需要存放到redis中,所以必須實現(xiàn)序列化接口。一個類實現(xiàn)序列化接口,它里面的類屬性也要實現(xiàn)序列化接口,但是BufferedImage是jdk的類,無法實現(xiàn)序列化接口,這樣就不把它放入到redis中,在校驗時,我么只會校驗驗證碼和過期時間,所以不會影響。

  2)修改ValidateCodeController.java

@GetMapping("/code/image")
public void createCode(HttpServletRequest request,HttpServletResponse response) throws Exception {  
    ImageCode imageCode = createImageCode(request);
    SimpleImageCode simpleImageCode = new SimpleImageCode(imageCode.getCode(),imageCode.getExpireTime());
    //request.getSession().setAttribute("imageCodeSession", imageCode);
    request.getSession().setAttribute("imageCodeSession", simpleImageCode);//序列化到redis中
    ImageIO.write(imageCode.getImage(), "JPEG", response.getOutputStream());
 }

  將SimpleImageCode放入到session中

  3)修改ValidateCodeFilter.java

private void validate(HttpServletRequest request){
  //ImageCode codeInSession = (ImageCode)request.getSession().getAttribute("imageCodeSession");
   SimpleImageCode codeInSession = (SimpleImageCode)request.getSession().getAttribute("imageCodeSession");
   String codeInRequest = request.getParameter("imageCode");
   ... ...//校驗邏輯   
   request.getSession().removeAttribute("imageCodeSession");
  }

  校驗驗證碼前從session中取出SimpleImageCode

  二、測試驗證

  1)啟動redis、80端口應用、8080端口應用,查看redis信息為空,如下:

  

  2)瀏覽器輸入:localhost:8080/index.html,跳轉登錄頁面,查看redis,如下:

  3)登錄后,查看redis,如下:

  4)同一個瀏覽器輸入:localhost/index.html,直接跳到index頁面,查看redis,如下:

  5)點擊index.html中的退出連接,查看redis,如下:

  6)再次訪問localhost:8080/index.html,跳轉登錄頁面,查看redis,如下:

  7)再次登錄8080的應用,查看redis,如下:

  通過測試發(fā)現(xiàn)實現(xiàn)了單點登錄。貼出截圖只是說明session存在了redis中,并且會隨著操作變化。實際無需關心redis。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot整合Redisson的步驟(單機版)

    SpringBoot整合Redisson的步驟(單機版)

    Redisson非常適用于分布式鎖,而我們的一項業(yè)務需要考慮分布式鎖這個應用場景,于是我整合它做一個初步簡單的例子(和整合redis一樣)。
    2021-05-05
  • SpringBoot+WebSocket實現(xiàn)即時通訊的方法詳解

    SpringBoot+WebSocket實現(xiàn)即時通訊的方法詳解

    這篇文章主要為大家詳細介紹了如何利用SpringBoot+WebSocket實現(xiàn)即時通訊功能,文中示例代碼講解詳細,對我們學習或工作有一定參考價值,需要的可以參考一下
    2022-05-05
  • Java實現(xiàn)多線程聊天室

    Java實現(xiàn)多線程聊天室

    這篇文章主要為大家詳細介紹了Java實現(xiàn)多線程聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Java實現(xiàn)簡易俄羅斯方塊

    Java實現(xiàn)簡易俄羅斯方塊

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡易俄羅斯方塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • SptingBoot過濾器Filter的使用詳解

    SptingBoot過濾器Filter的使用詳解

    這篇文章主要介紹了SptingBoot過濾器Filter的使用詳解,Filter屬于Servlet規(guī)范,并不是Spring獨有的,Filter主要用于攔截請求,做一些業(yè)務邏輯操作,然后可以決定請求是否可以繼續(xù)往下分發(fā),落到其他的Filter或者對應的Servlet,需要的朋友可以參考下
    2023-09-09
  • java調用dll方法總結

    java調用dll方法總結

    本篇文章小編給大家整理了java調用dll的方法的總結,有需要的朋友參考學下一下吧。
    2017-12-12
  • java ExecutorService使用方法詳解

    java ExecutorService使用方法詳解

    這篇文章主要為大家詳細介紹了java ExecutorService使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 詳解Spring事件發(fā)布與監(jiān)聽機制

    詳解Spring事件發(fā)布與監(jiān)聽機制

    Spring提供了ApplicationContext事件機制,可以發(fā)布和監(jiān)聽事件,這個特性非常有用。Spring內置了一些事件和監(jiān)聽器,例如在Spring容器啟動前,Spring容器啟動后,應用啟動失敗后等事件發(fā)生后,監(jiān)聽在這些事件上的監(jiān)聽器會做出相應的響應處理
    2021-06-06
  • SpringBoot加載外部依賴過程解析

    SpringBoot加載外部依賴過程解析

    這篇文章主要介紹了SpringBoot加載外部依賴過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Java字符拼接成字符串的注意點詳解

    Java字符拼接成字符串的注意點詳解

    這篇文章主要介紹了Java字符拼接成字符串的注意點詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07

最新評論