Spring Session入门(包含示例项目)

来源:互联网 发布:淘宝热卖排行 编辑:程序博客网 时间:2024/05/21 16:25
本指南描述了如何通过java配置来让Spring Session透明地使用Redis进行web项目的Session存储。

1、更新依赖
        在使用Spring Session之前,你必须保证已经更新了项目依赖。如果你使用的是Maven,请确保添加了一下 dependencies。
<dependency>  
        <groupId>org.springframework.data</groupId>  
        <artifactId>spring-data-redis</artifactId>  
        <version>1.4.1.RELEASE</version>  
    </dependency>  
    <dependency>  
        <groupId>redis.clients</groupId>  
        <artifactId>jedis</artifactId>  
        <version>2.5.2</version>  
    </dependency>  
    <dependency>  
        <groupId>org.springframework.session</groupId>  
        <artifactId>spring-session</artifactId>  
        <version>1.2.0.RELEASE</version>  
    </dependency>  
    <dependency>  
        <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.0.7.RELEASE</version>  
    </dependency> 
  </dependencies>

2、Spring Java 配置
        添加了必须的依赖之后,我们开始创建Spring配置的Java类。这个Spring配置类的作用是,通过创建一个Servlet Filter来让Spring Session实现代替原有的HttpSession实现。Spring 配置类如下:

@EnableRedisHttpSession  ①
public class Config {

    @Bean
    public JedisConnectionFactory connectionFactory(){
        JedisConnectionFactory connect = new JedisConnectionFactory();   ②
        connect.setPort(6379);
        connect.setHostName("192.168.99.100");
        return connect;
    }
}
        ① 通过@EnableRedisHttpSession注解,将会创建一个SessionRepositoryFilter的Spring Bean。通过这个Filter,能够把HttpSession替换成Spring Session的实现。在这个实例中,Spring Session将会把Session保存到Redis。
        ② 然后我们创建了一个JedisConnectionFactory用来连接Spring Session和Redis。如果没有设置Redis的port和host,JedisConnectFactory将会使用默认的地址(localhost)和端口(6379)。具体能容可参考reference documentation

3、Java Servlet 容器初始化
        我们通过上面说的config类来创建了SessionRepositoryFilter的Spring,用来把HttpSession替换成Spring Session自定义实现的Session管理。但是,为了让这个Filter能发挥作用,Spring还需要对Config类进行加载。所以,最后我们得保证在Servlet容器(例如Tomcat)中,这个Filter能够对每一个请求产生作用。幸好,Spring Session提供了一个有效的类(AbstractHttpSessionApplication Initializer),让这一系列步骤变得十分加单。
        示例如下:
public class Initializer extends
        AbstractHttpSessionApplicationInitializer {     
    public Initializer(){
        super(Config.class);     
    }
}
    ①第一步是创建一个继承AbstractHttpSessionApplicationInitializer的Java类。这能让上文中的创建的Filter Spring Bean注册到Servlet容器中,并且对所有的请求生效。
    ②AbstractHttpSessionApplicationInitializer 提供了让Spring 加载Config类的机制。

4、HttpSession 示例应用
        指南提供了一个HttpSession的简单示例。为了让这个示例能正常运行,需要先在你的本地安装Redis 2.8+,默认端口为6379,让JedisConnectionFactory能够连接到一个Redis Server。
        示例代码如下:
@WebServlet("/session")
public class SessionServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                    throws ServletException, IOException {
            String attributeName = req.getParameter("userName");
            String attributeValue = req.getParameter("tiger");
            req.getSession().setAttribute(attributeName, attributeValue);
            resp.sendRedirect(req.getContextPath() + "/");
    }

    private static final long serialVersionUID = 2878267318695777395L;
}

        在Servlet容器中部署示例应用,然后通过浏览器访问http://localhost:8080/springsessionDemo/session。访问之后即可以在Redis中看到Session被保存。



示例项目下载地址:http://pan.baidu.com/s/1kVdIzCr

0 0
原创粉丝点击