1.sessionは何ですか
ユーザーがフロントエンドで要求を開始すると、サーバーは、現在のセッションのユーザーを作成し、サーバはセッションIDがクライアントに戻って書いただろう、限り、ユーザーがブラウザを閉じないように、サーバ要求は再び、セッションIDは、サーバに渡さ
サーバーは、セッションIDに応じて、そのサービスに対応するセッションを検索します。
分散展開時に、セッションが次回ユーザ要求上、サーバ側に格納され、ロードバランシング、他のサーバノードに分散されてもよい、一貫セッションの問題に対処するため、必要性、
分散セッションを使用して実装することがRedisの、個人的な理解がRedisの中に保存されたセッションは、時間は各要求のために来たということで、Redisのセッションから情報を読み取り
2.コードの実装
依存性は、導入する必要が①.maven
<依存性> <のgroupId> org.springframework.boot </のgroupId> <たartifactId>ばねブートスタータウェブ</たartifactId> </依存> <依存性> <のgroupId> org.springframework.session </のgroupId> <たartifactId >春・セッション</たartifactId> </依存関係>
②。Redisのコンフィギュレーションファイルは、IPアドレスとポートを指定します
spring.redis.host = 172.18.66.45
spring.redis.port = 6379
③.httpSession設定
パッケージcom.session.config。 輸入org.springframework.beans.factory.annotation.Value。 輸入org.springframework.context.annotation.Bean。 輸入org.springframework.data.redis.connection.jedis.JedisConnectionFactory; 輸入org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession。 // maxInactiveIntervalInSeconds设置セッション有效时间、单位是秒;默认是30分钟 @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 180 ) パブリック クラスSessionConfig { @value( "$ {spring.redis.host}" ) プライベート文字列のホスト名。 @値("$ {spring.redis.port}" ) プライベート int型ポート。 @Bean 公共JedisConnectionFactoryはconnectionFactory(){ JedisConnectionFactoryはconnectionFactory = 新しいJedisConnectionFactory()。 connectionFactory.setPort(ポート); connectionFactory.setHostName(で、hostName)。 System.out.println( "获取到的ホスト名是:" +で、hostName + "ポート:" + ポート)。 返却はconnectionFactoryを。 } }
そして、コントローラを実装するには、ログインセッションかどうかをチェック、ユーザーに応じて、セッションを書いて、実際のビジネスシナリオをシミュレートすることができます
パッケージcom.session.controller。 インポートのjavax.servlet.http.HttpServletRequest; 輸入javax.servlet.http.HttpSession。 輸入org.springframework.web.bind.annotation.RequestMapping。 輸入org.springframework.web.bind.annotation.RestController。 @RestController パブリック クラスSessionController { // 模拟第一次登陆时、保存セッション @RequestMapping(値= "/ログイン" ) パブリック文字列ログイン(HttpServletRequestのリクエスト){ HttpSessionのセッション = でrequest.getSession(); 文字列str =(文字列)session.getAttribute( "ユーザー情報" )。 IF(STR == NULL || "" .equals(STR)){ にsession.setAttribute( "ユーザー情報"、 "セッションMPYテスト" ); 戻り "成功ログイン-SUCCESS" ; } 他{ リターン「セッションデータが存在します、ユーザは、「ログインした; } } / * 次に、本方法は、モードを着陸、コールサービス・インターフェースは、
*実際のビジネスシナリオでは、インターセプタは、各要求のために使用することができるユーザのログイン認証するかどうかを判定し、セッションの有効期限が切れました
/ * @RequestMapping(値= "/のgetSession" ) パブリック文字列のgetSession(HttpServletRequestの要求){ HttpSessionのセッション =でrequest.getSession(); STR文字列 =(文字列)session.getAttribute( "ユーザー情報" ); IF(STR == NULL || "" .equals(STR)){ リターン "セッションでないデータは、記号" ; } そうで{ // ログインユーザ、他のサービス・コードの処理 のSystem.out.println(「セッション属性である:」+ STR); 戻りSTR; } } @RequestMapping(値 =「/ジンバブエログアウト」) パブリック文字列ジンバブエログアウト(HttpServletRequestの要求){ HttpSessionのセッション = でrequest.getSession(); 文字列str=(文字列)session.getAttribute( "ユーザー情報" )。 もし(!STR = ヌル && "" .equals(文字列)){ はsession.invalidate(); } 戻り "退出成功" 。 } }
検討することを学ぶの原則@EnableRedisHttpSessionと春セッション
//github.com/mapy95/spring-session.git:特定のコードは、HTTPS、GitHubのにアップロードされました