Session共享小案例

   日期:2020-09-06     浏览:95    评论:0    
核心提示:Session共享小案例在Spring中实现Session共享比较简单,也就是Spring-Session组件的使用。配置先添加依赖。此处选用redis作为缓存库,所以redis相关的依赖,再加上session与redis集成依赖就可以了。其他的缓存产品也大同小异。 org.springframework.session spring-session

Session共享小案例

在Spring中实现Session共享比较简单,也就是Spring-Session组件的使用。

配置

先添加依赖。

此处选用redis作为缓存库,所以redis相关的依赖,再加上session与redis集成依赖就可以了。其他的缓存产品也大同小异。

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

其次再配置下redis连接。如下例:

 @Configuration
@EnableRedisHttpSession
public class SessionConfig {
    @Bean
    public LettuceConnectionFactory connectionFactory() {
        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
        // 使用redis的3号库
        // 默认库写了太多其他的东西
        // 此处redis的配置与配置文件中redis的属性是独立的
        configuration.setDatabase(3);
        return new LettuceConnectionFactory(configuration);
    }
}

配置就写这么多,下面写个页面测试下。

测试

测试方法很简单:

    @GetMapping("")
    public ModelAndView hello(ModelAndView mv, HttpSession session) {
        session.setAttribute("aaa", LocalDateTime.now());
        Object shared = session.getAttribute("shared");
        if (shared == null) {
            String value = "I am shared from " + port;
            shared = value;
            session.setAttribute("shared", value);
        }
        Object aaa = session.getAttribute("aaa");
        mv.addObject("time", aaa);
        mv.addObject("shared", shared);
        mv.setViewName("hello");
        return mv;
    }

我们放入两个变量到session里,一个是当前时间,另一个带有第一次访问的端口号。如果session共享成功,那么再次以不同端口号启动当前项目将看到第一次的启动的端口号。如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AZrR4WCR-1599237259340)(https://s1.ax1x.com/2020/09/04/wF7QPJ.md.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lxou2AA9-1599237259342)(https://s1.ax1x.com/2020/09/04/wF7lG9.md.png)]

表明的确实现了session共享。

另外,session共享是在同一个浏览器实现的。两个浏览器是不行的。

IDEA启动多个项目

应该不会我是最后一个知道IDEA可以启动多个项目的吧,不会吧,不会吧。

先打开配置项

编辑配置项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MCmfnIZP-1599237259347)(https://s1.ax1x.com/2020/09/04/wFbJAO.png)]

  1. 添加一个 Application 配置
  2. 取个名字
  3. 勾选允许并行运行
  4. 找到启动类
  5. 配置启动参数

配置完成就可以很方便地运行同一项目两次了。

shiro的session共享

上面搞定了简单的session,加一点点难度,整下shiro的session共享。

配置

添加依赖:

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.5.2</version>
</dependency>
<!-- shiro+redis缓存插件 -->
<dependency>
    <groupId>org.crazycake</groupId>
    <artifactId>shiro-redis</artifactId>
    <version>2.4.2.1-RELEASE</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>com.github.theborakompanioni</groupId>
    <artifactId>thymeleaf-extras-shiro</artifactId>
    <version>2.0.0</version>
</dependency>

写点配置:

    @Bean
    public DefaultWebSessionManager sessionManager() {
        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
        sessionManager.setSessionDAO(redisSessionDAO());
        return sessionManager;
    }

    @Bean
    public RedisSessionDAO redisSessionDAO() {
        RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
        redisSessionDAO.setRedisManager(redisManager());
        return redisSessionDAO;
    }

    @Bean
    public RedisManager redisManager() {
        // RedisManager redisManager = new RedisManager();
// redisManager.setHost(host);
// redisManager.setPort(port);
// // 配置缓存过期时间
// redisManager.setExpire(expireTime);
// redisManager.setTimeout(timeOut);
        // redisManager.setPassword(password);
        return new RedisManager();
    }

这里主是把shiro的session操作替换为redis。其他配置就随便配配。

另外,为了测试方便,登录时直接通过,不会作验证的。

@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)
    throws AuthenticationException {
    Object principal = token.getPrincipal();
    return new SimpleAuthenticationInfo(principal, "123", "MyShiroRealm");
}

测试

建立一个登录画面,登录成功后会重定向welcome画面,会显示登录名。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uqvnPG40-1599237259349)(https://s1.ax1x.com/2020/09/04/wFzeSO.png)]

下面我们使用Jerry来登录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QChKyBX9-1599237259350)(https://s1.ax1x.com/2020/09/04/wFz3kt.png)]

源码

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服