ホームページ >Java >&#&チュートリアル >SpringBoot が SpringSession を統合して分散ログインを実装する方法

SpringBoot が SpringSession を統合して分散ログインを実装する方法

王林
王林転載
2023-05-10 20:34:04745ブラウズ

セッション共有

たとえば、2 つのドメイン名:

  • aaa.yupi.com

  • bbb.yupi.com

  • Cookie を共有したい場合は、yupi.com

  • # などの上位レベルのパブリック ドメイン名を植えることができます。
##なぜサーバー A がログインすると、リクエストはサーバー B に送信されます。ユーザーは彼を知りませんか?

ユーザーはAでログインしているため、Aにセッション(ユーザーのログイン情報)が存在します

その結果、Bにリクエストを行うと、Bはユーザー情報を持っていないため、認識されません。

SpringBoot が SpringSession を統合して分散ログインを実装する方法

ソリューション

単一サーバーのメモリにデータを置く代わりに共有ストレージを使用

SpringBoot が SpringSession を統合して分散ログインを実装する方法

SpringBoot は SpringSession を統合して分散ログインを実装します

redis を操作するために redis を紹介します:

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.6.4</version>
</dependency>

セッションの自動保存を可能にする Spring-session と redis の統合を紹介しますRedis 内:

<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>2.6.3</version>
</dependency>

Spring セッションのストレージ構成を変更します spring.session.store-type

デフォルトは none です。つまり、次の場所に保存されます。単一の Server

store-type: redis、redis からの読み取りおよび書き込みセッションを示す

  redis:
    host: localhost
    port: 6379
  session:
    timeout: 60
    store-type: redis

Effect:

/**
 * @author 刘宇浩
 */
@RestController
@RequestMapping("/session")
public class SessionController {

    public static final String key = "USERLOGINSTATE";

    @GetMapping("/set")
    public Result setSession(HttpServletRequest request) {
        User user = new User();
        user.setClassName("21软件3");
        user.setName("lyl");
        request.getSession().setAttribute(key, user);
        return ResultGenerator.genSuccessResult(200, "成功");
    }
    @GetMapping("/get")
    public Result getSession(HttpServletRequest request){
        User userloginstate = (User)request.getSession().getAttribute(key);
        System.out.println(userloginstate.getName());
        System.out.println(userloginstate.getClassName());
        return ResultGenerator.genSuccessResult(200,"成功");
 
    }
}

以上がSpringBoot が SpringSession を統合して分散ログインを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。