`
dfwang
  • 浏览: 96082 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HttpServletRequestWrapper 学习

    博客分类:
  • j2ee
阅读更多
使用过滤器不能改变HttpServletRequest对象的参数确实大大缩减了filter的应用范围,幸运的是,可以通过使用装饰模式来改变其状态
下面就是一个HttpServletRequest装饰类的样例:
一个删除空白字符的Filter
通过实现一个删除空白字符的filter,来演示如何使用javax.servlet.http.HttpServletRequestWrapper类来装饰HttpServletRequest对象,在本例中,这个filter将删除所传来的参数中多余的空白字符,这在许多servlet/JSP应用中是很有用的,包括Struts及JavaServer  Faces等应用。例如,Struts通过调用HttpServletRequest对象的getParameterValues()对象来处理action表单。通过覆盖装饰类中此方法,你可以改变当前HttpServletRequest对象的状态。要创建HttpServletRequest的装饰类,需要继承HttpServletRequestWrapper并且覆盖希望改变的方法。
package trimmer.filter; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletRequestWrapper; 

public final class MyRequestWrapper extends HttpServletRequestWrapper { 
public MyRequestWrapper(HttpServletRequest servletRequest) { 
super(servletRequest); 
} 

public String[] getParameterValues(String parameter) { 
String[] results = super.getParameterValues(parameter); 
if (results == null) 
return null; 
int count = results.length; 
String[] trimResults = new String[count]; 
for (int i = 0; i < count; i++) { 
trimResults[i] = results[i].trim(); 
} 
return trimResults; 
} 
} 

filter
package trimmer.filter; 

import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServletRequest; 

public class MyFilter implements Filter { 
private FilterConfig filterConfig; 

public void init(FilterConfig filterConfig) throws ServletException { 
System.out.println("Filter initialized"); 
this.filterConfig = filterConfig; 
} 

public void destroy() { 
System.out.println("Filter destroyed"); 
this.filterConfig = null; 
} 

public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException { 
chain.doFilter(new MyRequestWrapper((HttpServletRequest) request), 
response); 
} 
} 

 

web.xml
<filter> 
       <filter-name>TrimmerFilter</filter-name> 
       <filter-class>trimmer.filter.MyFilter</filter-class> 
   </filter> 
   <filter-mapping> 
       <filter-name>TrimmerFilter</filter-name> 
       <url-pattern>*.do</url-pattern> 
   </filter-mapping> 

启动这个应用后,在表单中输入一些值,提交表单,看看这个filter是如何修整输入数值的。这是一个实用的装饰模式的应用。

分享到:
评论

相关推荐

    使用HttpServletRequestWrapper在filter修改request参数

    在Java Web开发中,`HttpServletRequestWrapper` 是一个非常重要的工具,它允许我们在过滤器(Filter)中对HTTP请求(Request)进行拦截和修改。...通过学习和实践这些知识点,开发者可以提高其在Web应用开发中的能力。

    SpringSecurity学习

    过滤链包含了如`HttpServletRequestWrapper`、`UsernamePasswordAuthenticationFilter`等,它们负责处理请求,进行身份验证和授权。 接下来是`ch02`,这个章节可能会涉及Spring Security的认证过程。Spring ...

    Killtest 免费提供 310-084 最新资料下载

    根据给定的文件信息,我们可以提炼出与IT...以上知识点不仅涵盖了310-084考试的主要内容,也深入探讨了Java Web开发中的一些核心概念和技术细节,对于准备该认证的IT专业人士而言,具有很高的学习价值和实践指导意义。

    J2EE资源练习多选

    **描述**:本练习资源旨在帮助学习者检测自己在Java 2平台企业版(J2EE)方面掌握的程度,并找出可能存在的知识盲点。 #### 知识点一:关于Tag Files的真实陈述 1. **经典标签处理器与标签文件共存性**:经典标签...

    Spring-Security-demo.zip

    关键过滤器包括 `DelegatingFilterProxy`、`HttpServletRequestWrapper` 和 `FilterSecurityInterceptor`。通过分析示例代码,我们可以了解每个过滤器的作用和它们如何协同工作。 4. **配置**:Spring Security ...

    springMVC security Demo

    - Spring Security通过一系列过滤器链(Filter Chain)来处理请求,如`HttpServletRequestWrapper`和`HttpServletRequestFilter`。 5. **错误处理** - 定义未认证和未授权的处理页面,例如401和403错误页面。 6....

    Spring Security 权限控制中文API

    例如,`HttpServletRequestWrapper`过滤器用于包装请求,`UsernamePasswordAuthenticationFilter`处理登录请求,`AnonymousAuthenticationFilter`处理匿名用户,`RememberMeAuthenticationFilter`处理记住我功能,`...

    Spring Security 3 中文 chm

    例如,`HttpServletRequestWrapperFilter`用于包装请求,`UsernamePasswordAuthenticationFilter`处理登录请求,`AnonymousAuthenticationFilter`为未认证用户提供匿名身份,`ExceptionTranslationFilter`处理安全...

    Spring security认证与授权(二)源代码

    6. **SecurityContextHolderAwareRequestFilter**:将 SecurityContextHolder 的信息转换为 HttpServletRequestWrapper 的属性,以便于其他过滤器或控制器访问。 **配置 Spring Security** Spring Security 的配置...

    J2EE基础,设计模式

    5. 装饰器模式:在J2EE中,装饰器模式常用于动态地给对象添加新的行为或责任,例如HttpServletRequestWrapper和HttpServletResponseWrapper。 6. 适配器模式:在与不同标准或接口进行集成时,适配器模式可以帮助...

    springmvc4配置防止XSS攻击的方法

    首先,创建XssHttpServletRequestWrapper类继承自HttpServletRequestWrapper。在这个类中,需要重写getParameter()、getParameterValues()和getHeader()等方法,以确保对请求中的参数、参数值和请求头进行清理,防止...

    springSecurity3.x

    例如,`HttpServletRequestWrapper`被用来包装原始请求,以便在请求处理之前或之后进行修改。 4. **角色与权限**:Spring Security支持角色和权限的概念,可以将权限分配给不同的角色。这使得你可以设置细粒度的...

    SpringSecurity3.0 教程

    每个过滤器都有特定的任务,如`HttpServletRequestWrapper`用于包装请求,`DelegatingFilterProxy`用于委托到Spring的Bean。 2. **Authentication Manager**:负责处理认证请求,可以自定义认证策略,例如基于...

    spring security 官方文档

    过滤器链包含多个预定义的过滤器,如`HttpServletRequestWrapperFilter`、`AnonymousAuthenticationFilter`、`RememberMeAuthenticationFilter`等,它们按顺序执行,处理身份验证、会话管理、CSRF保护等功能。...

    Spring3 Security中文教程

    每个过滤器都有特定的任务,如`HttpServletRequestWrapperFilter`用于包装请求,`DelegatingFilterProxy`用于委托给Spring Bean。 5. **访问决策管理器(Access Decision Manager)**:这个组件负责决定用户是否...

    多域名单点登录JAVA版

    这通常通过过滤器(Filter)来实现,例如在JSP应用中使用`HttpServletRequestWrapper`。 4. **安全考虑**:SSO系统必须确保票据的安全性,防止中间人攻击。通常采用HTTPS协议加密通信,并且对票据进行签名,以验证...

    springSecurity

    如`HttpServletRequestWrapper`、`FilterSecurityInterceptor`等。 - **AuthenticationManager**:管理认证过程,处理登录请求,验证用户凭证。 - **AccessDecisionManager**:负责授权决策,根据安全配置和用户...

    Spring Security手册

    每个过滤器都有特定的职责,如`HttpServletRequestWrapper`、`DelegatingFilterProxy`等。 2. **配置** - **XML配置**: 传统的Spring Security配置方式,通过XML文件设置安全规则,定义过滤器链和安全元数据。 - ...

    Spring Security3 Demo

    这些过滤器包括`DelegatingFilterProxy`(用于配置Spring Security过滤器链)、`HttpServletRequestWrapper`(用于修改请求)和`FilterSecurityInterceptor`(执行访问决策)等。 2. **认证**: 用户尝试访问受保护...

Global site tag (gtag.js) - Google Analytics