思路:使用装饰者模式,定义MyRequestSessionWrapper类继承HttpServletRequestWrapper类,重写session的get和setAttr等方法;然后通过filter在执行servlet前,用MyRequestSessionWrapper对象来代替HttpServletRequest。
代码如下:
public class MyRequestSessionWrapper extends HttpServletRequestWrapper { public MyRequestSessionWrapper(HttpServletRequest request) { super(request); } @Override public HttpSession getSession() { //在分布式集群项目中,从redis中获取共享的session System.out.println("重写了sesson获取方式,从redis获取session~~~"); return super.getSession(); } }
filter替换自定义的request包装类代码如下:
public class MySessionFilter implements Filter { public MySessionFilter() { } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request = new MyRequestSessionWrapper((HttpServletRequest)request); chain.doFilter(request, response); } public void init(FilterConfig fConfig) throws ServletException { } }
另外,过滤器、拦截器、监听器的区别如下:
过滤器:【可配在web.xml】过滤器Filter常用来过滤字符编码、业务逻辑判断等,依赖servlet容器,即对请求和返回等进行过滤,预处理或后续处理。比如:
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
拦截器:【并不在web.xml】常用于切面编程,基于java的反射机制,比如权限管理、日志等,比如静态文件和请求地址的权限。可对某action或service方法执行前后做操作。比如spring的aop切面编程。
监听器:【可配在web.xml】监听器监听某个事件,并在此事件前后做一些操作。web启动时创建,只初始化一次,web停止则销毁。可用来初始化一些配置信息。比如:
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
执行顺序为:过滤前–拦截前–action调用–拦截后–过滤后
拦截器与过滤器的区别(引用网上的对比):
1)拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2)拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
3)拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4)拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
5)在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
相关推荐
3. **拦截器或过滤器**:在每个服务的请求处理链路中,添加拦截器或过滤器,检查请求中的Session ID,然后从Redis中获取相应的Session数据。 4. **更新与删除操作**:当Session数据发生变化时(如用户购物车添加商品...
4. **Filter**: 为了实现Session共享,Spring Session 使用一个自定义的Servlet过滤器(`DelegatingSessionFilter`),这个过滤器负责拦截HTTP请求,处理Session相关操作。 5. **Spring Boot集成**: 如果使用Spring...
权限控制则是在过滤器或拦截器中实现,检查每个请求是否包含有效的Session以及用户是否有访问特定资源的权限。 5. **使用SessionRepository**: 在Spring Boot应用中,我们可以注入`SessionRepository`接口,通过...
6. **安全性考虑**:使用memcached共享session时,需要注意安全问题,例如防止session hijacking(会话劫持)和session fixation攻击。可以使用HTTPS、定期刷新session ID、限制session的有效范围等方式增强安全性。...
- **中间件或过滤器**:在Web应用中,添加一个中间件或过滤器,负责拦截每个HTTP请求。当请求到达时,检查请求头中的SessionID,如果存在,则从Redis中读取对应的数据;响应时,将Session数据写回Redis。 - **...
4. **过滤器或拦截器**: 在Web应用中,为了在每个请求之间透明地处理session,通常会使用过滤器或者拦截器来拦截请求,然后由它们调用SessionManager进行session操作。 5. **配置**: 配置文件或代码中需要设置Redis...
3. 在Dubbo服务提供者和消费者间,确保session信息的正确传递,可能需要通过自定义拦截器或过滤器来实现。 4. 配置Redis,作为session存储服务器,确保其稳定性和性能。 通过这样的组合,可以在分布式环境中实现...
例如,你可以使用 JMX (Java Management Extensions) 来监控和管理 Session 状态,或者通过过滤器来拦截 Session 操作。此外,还可以结合 Spring 或其他框架进一步简化配置和使用。 总结,memcached-session-...
本篇文章将详细介绍如何配置Struts2的登录拦截器,以及其背后的原理和实践应用。 首先,让我们理解一下拦截器的概念。在Struts2中,拦截器是基于Java的动态代理机制实现的,它们按照预定义的顺序对Action调用进行...
在实现基于Redis的缓存共享Session时,Shiro提供了一种高效且可扩展的方法。在这个过程中,有几个关键点需要注意,以确保系统的稳定性和性能。下面我们将深入探讨这些要点。 首先,我们来看`...
过滤器之间可以共享信息,例如,一个登录验证过滤器可以在会话中设置一个标志,然后后续的过滤器可以根据这个标志进行不同操作。 5. **过滤器生命周期**: 每个过滤器都有自己的生命周期,包括初始化(init())、...
过滤器在Java Web开发中扮演着重要角色,尤其是在处理请求和响应时进行预处理和后处理。在这个主题中,我们将主要关注Spring框架中的Filter机制,以及如何利用它来实现用户权限控制。 在Java Servlet规范中,Filter...
- **解决方法**:使用`RequestInterceptor`拦截器手动添加Session信息。 ```java @Configuration public class FeignConfig { @Bean public RequestInterceptor requestInterceptor() { return new ...
- 自动跳转到登录页:服务器可以设置拦截器或过滤器,当检测到Session过期,直接重定向到登录页面。 - 提示信息:告知用户Session已过期,需要重新登录。 4. **Session与Cookie的关系**:Session依赖于Cookie来...
3. 定义过滤器链,配置需要拦截的URL及其对应的过滤器。 4. 在Spring Boot的启动类上添加注解@EnableShiro,启用Shiro配置。 Vue作为前端框架,可以通过Axios等库发送带Token的请求。同时,前端也可以根据Shiro返回...
本项目通过结合使用Filter(过滤器)和Memcached来实现一个高效的session服务器,以解决跨服务器会话共享的问题。 首先,让我们详细了解一下`Filter`。在Java Web开发中,Filter是Servlet API的一部分,允许开发者...
在Session共享场景中,Spring MVC可以配置拦截器来处理Session相关操作,比如设置和读取Session数据。 其次,**Apache Shiro** 是一个强大的安全框架,用于处理身份验证、授权(权限控制)和会话管理。在多服务器...
描述中提到的博文链接虽然没有具体内容,但我们可以推测博主可能分享了如何通过Filter(过滤器)来优化这个过程。Filter是Java Servlet规范的一部分,它允许开发者在请求处理前或处理后进行拦截和处理,例如在请求...
Spring Session提供了拦截器、过滤器等多种集成方式,使得在Spring应用中集成非常方便。 其次,Hibernate 5是一个流行的Java ORM框架,用于简化数据库操作。它允许开发人员使用Java对象来操作数据库记录,而不是...