`

利用Spring随时随地获得Request和Session

阅读更多

利用Spring随时随地获得Request和Session

一、准备工作:

 

在web.xml中添加  

 

<listener>    
        <listener-class>    
            org.springframework.web.context.request.RequestContextListener
        </listener-class>    
</listener>

 

二、使用方法: 
1、方法一:通过代码实现 

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();


2、方法二:通过注解实现: 

 

 

@Autowired
private  HttpServletRequest request;
三、关于RequestContextListener的背景知识:
基于LocalThread将HTTP request对象绑定到为该请求提供服务的线程上。这使得具有request和session作用域的bean能够在后面的调用链中被访问到。  

Request作用域  
<bean id="loginAction" class="com.foo.LoginAction" scope="request"/>  


针对每次HTTP请求,Spring容器会根据loginAction bean定义创建一个全新的LoginAction bean实例,且该loginAction bean实例仅在当前HTTP request内有效,因此可以根据需要放心的更改所建实例的内部状态,而其他请求中根据loginAction bean定义创建的实例,将不会看到这些特定于某个请求的状态变化。当处理请求结束,request作用域的bean实例将被销毁。  

Session作用域  
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>  
针对某个HTTP Session,Spring容器会根据userPreferences bean定义创建一个全新的userPreferences bean实例,且该userPreferences bean仅在当前HTTP Session内有效。与request作用域一样,你可以根据需要放心的更改所创建实例的内部状态,而别的HTTP Session中根据userPreferences创建的实例,将不会看到这些特定于某个HTTP Session的状态变化。当HTTP Session最终被废弃的时候,在该HTTP Session作用域内的bean也会被废弃掉。  

global session作用域  

<bean id="userPreferences" class="com.foo.UserPreferences" scope="globalSession"/>  

global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。  

请注意,假如你在编写一个标准的基于Servlet的web应用,并且定义了一个或多个具有global session作用域的bean,系统会使用标准的HTTP Session作用域,并且不会引起任何错误  
二、为什么需要额外的配置RequestContextFilter  
也许会有一个疑问,已经通过ContextLoaderListener(或ContextLoaderServlet)将Web容器与Spring容器整合,为什么这里还要用额外的RequestContextListener以支持Bean的另外3个作用域,原因是ContextLoaderListener实现ServletContextListener监听器接口,而ServletContextListener只负责监听Web容器的启动和关闭的事件。RequestContextFilter实现ServletRequestListener监听器接口,该监听器监听HTTP请求事件,Web服务器接收的每次请求都会通知该监听器。通过配置RequestContextFilter,Spring容器与Web容器结合的更加密切。  
三、作用域依赖问题  

如果将Web相关作用域的Bean注入到singleton或prototype的Bean中,这种情况下,需要Spring AOP

<bean name="car" class="com.demo.Car" scope="request">  

    <aop:scoped-proxy/>  

</bean>  

<bean id="boss" class="com.demo.Boss" >  

   <properrty name="car" ref="car" />  

</bean>  

 

 

分享到:
评论

相关推荐

    自己实现的spring-session

    自己实现httpSession,在getSession中获取cookie,从cookie中读取sessionId, 如果没有sessionId就新创建session,如果有sessionId,就去redis中查看是否有此id的记录,如果没有就新建session,如果有,还是新建...

    Spring Session + redis实现session共享

    本文将深入探讨如何利用Spring Session与Redis来实现这一功能。 首先,Spring Session是一个开源项目,由Pivotal Software开发,它扩展了Spring MVC,提供了对HTTP会话(session)的管理支持。Spring Session的核心...

    Spring Session API(Spring Session 开发文档).CHM

    Spring Session。 官网 Spring Session API。Spring Session 开发文档。

    Spring-session2整合spring5+redis

    Spring-session-data-redis允许我们在Spring MVC应用中利用Redis存储和恢复HTTP会话,而Spring-data-redis则提供了操作Redis数据库的一系列高级API。 首先,我们来看Spring Session。Spring Session的主要目标是...

    Springboot+SpringSecurity+SpringSession+Redis+Mybatis-Plus+Swwager.zip

    综上所述,这个项目利用Spring生态的组件,构建了一个具备用户认证、权限控制、会话管理、数据操作和API文档功能的Web应用。这种整合方案在实际开发中非常常见,可以帮助我们快速构建安全、高效的后端服务。通过深入...

    spring session redis分布式session

    在分布式Session场景下,我们可以利用Redis的高可用性和持久化特性,存储用户的Session数据。Spring Session通过与Redis的集成,将Session数据序列化后存储到Redis中,每次请求时从Redis读取Session数据,确保了多...

    Spring中Scope为Request和Session的Bean了.docx

    总结来说,`Request`和`Session`作用域是Spring Web应用程序中管理Bean生命周期的关键工具。`RequestScope`确保每个HTTP请求都有一个独立的Bean实例,而`SessionScope`则保证在同一个会话期间使用同一个Bean实例,...

    Spring中自定义session管理,SpringSession的使用

    1. 添加依赖:在Spring Boot项目中,可以通过添加SpringSession的相关依赖到`pom.xml`或`build.gradle`文件中,比如选择Redis作为存储,添加`spring-boot-starter-data-redis`和`spring-session-data-redis`依赖。...

    SpringBoot集成Spring Security登录管理 添加 session 共享【完整源码+数据库】

    我们将基于给定的标签——SpringBoot、SpringSecurity、mysql、session共享和idea来构建一个完整的示例。 首先,SpringBoot是一个轻量级的Java框架,它简化了创建独立的、生产级别的基于Spring的应用程序。通过内置...

    springsession管理多台tomcatsession

    在本场景中,我们将讨论如何利用 SpringSession 将 Tomcat 的 session 数据同步到 Redis 数据库存储,以实现高可用性和可扩展性的架构。 首先,理解为什么要使用 SpringSession 和 Redis。在传统的 web 应用中,...

    spring-session实现session共享

    Spring-Session能够透明地与Spring MVC和Spring Boot集成,无需对现有代码做大量改动,就能实现Session的共享。 **单点登录(SSO)** 单点登录是一种让用户在多个相互关联的应用系统中只登录一次,即可在整个系统...

    spring-session+spring依赖jar包

    spring-session+spring依赖jar包,包含spring4.0.2.RELEASE相关jar包和commons-pool2-2.4.2.jar,jedis-2.7.3.jar,spring-data-redis-1.6.2.RELEASE.jar,spring-session-1.1.1.RELEASE.jar

    spring-session-1.3.5.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-session-1.3.5.RELEASE.jar; 赠送原API文档:spring-session-1.3.5.RELEASE-javadoc.jar; 赠送源代码:spring-session-1.3.5.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-session-...

    Spring boot集成spring session实现session共享的方法

    Spring Boot 集成 Spring Session 实现 Session 共享的方法 Spring Boot 是目前流行的 Java 框架,它提供了许多便捷的功能和配置项,使得开发者可以快速构建项目。但是,在分布式环境中,Session 的共享变得非常...

    SpringSession同时支持Cookie和header策略

    本文将深入探讨SpringSession如何支持Cookie和header策略,并解析`CookieHeaderHttpSessionStrategy.java`这个文件中的关键概念和技术细节。 首先,我们来看标题提及的“SpringSession同时支持Cookie和header策略”...

    学习Spring-Session+Redis实现session共享

    当配置完成后,开发者可以像往常一样使用标准的Servlet API来获取和设置Session,而底层则会通过Spring-Session将这些信息存储在Redis中。 下面展示了一个简单的示例,该示例演示了如何在控制器中设置Session: ``...

    基于java config的springSecurity 六 集成spring session

    参考资料: http://docs.spring.io/spring-session/docs/current-SNAPSHOT/reference/html5/guides/security.html http://blog.csdn.net/xiejx618/article/details/43059683

    浅谈Spring学习之request,session与globalSession作用域

    在Spring框架中,request、session和globalSession是三个重要的作用域,分别对应着不同的生命周期和应用场景。在本文中,我们将深入探讨这三个作用域的定义、特点和应用场景。 Request作用域 Request作用域是指在...

    spring session实现session共享

    2. **Session Replication**: Spring Session 实现了Session的复制和同步,确保无论用户连接到哪个服务器,都能获取到正确的Session状态。 3. **Store Backend**: Spring Session 可以配置多种存储后端,如Redis、...

    spring-session-data-redis-2.0.4.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-session-data-redis-2.0.4.RELEASE.jar; 赠送原API文档:spring-session-data-redis-2.0.4.RELEASE-javadoc.jar; 赠送源代码:spring-session-data-redis-2.0.4.RELEASE-sources.jar; 赠送...

Global site tag (gtag.js) - Google Analytics