Maison >Java >javaDidacticiel >Comment SpringBoot intègre SpringSession pour implémenter la connexion distribuée

Comment SpringBoot intègre SpringSession pour implémenter la connexion distribuée

王林
王林avant
2023-05-10 20:34:04745parcourir

Partage de session

Par exemple, deux noms de domaine :

  • aaa.yupi.com

  • bbb.yupi.com

  • Si vous souhaitez partager des cookies, vous pouvez planter un niveau supérieur nom de domaine public, tel que yupi .com

Pourquoi le serveur A envoie-t-il une requête au serveur B après la connexion et ne reconnaît-il pas l'utilisateur ?

L'utilisateur se connecte en A, donc la session (informations de connexion de l'utilisateur) existe sur A

Par conséquent, lors de la demande de B, B n'a pas d'informations utilisateur, il ne le reconnaît donc pas.

Comment SpringBoot intègre SpringSession pour implémenter la connexion distribuée

Solution

Stockage partagé au lieu de mettre les données dans la mémoire d'un seul serveur

Comment SpringBoot intègre SpringSession pour implémenter la connexion distribuée

SpringBoot intègre SpringSession pour implémenter la connexion distribuée

Présentation de Redis et possibilité de faire fonctionner 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>

Présentation de l'intégration de spring-session et redis pour stocker automatiquement les sessions dans 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>

Modifier la configuration de stockage spring-session spring.session.store-type

La valeur par défaut est none, ce qui signifie qu'elle est stockée sur un serveur unique

store-type : redis, ce qui signifie des sessions de lecture et d'écriture depuis redis

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

Effet :

/**
 * @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,"成功");
 
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer