roy

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  1 随笔 :: 5 文章 :: 0 评论 :: 0 Trackbacks

Intercepting Filter(拦截过滤器?)
        这个不用多说了,拦截用户的请求,在WEB中实现个Filter接口,然后配置在WEB.XML下就可以用,FilterManager已经由服务器提供商写好了,基于应用上只需实现就可以了,这里关注的是这个模式解决的问题。
        1.客户有没被授权?
        2.客户是否具有有效会话?
        3.客户IP地址是否来自信任网络段?
        4.客户端传输使用何种方法编码?
        5.客户端浏览器类型我们支持吗?
所有这些将决定请求的转发,以后后续的流程。如果不用Filter,则需要在其后的控制中做条件测试,然后再处理请求,一般用嵌套IF/ELSE就可完成。但缺点在于,
        不够简练
,多个控制做的条件测试都相同。
        将过滤和控制放在一起,不够灵活,过滤通常是可变的,比如信任IP地址段,或者是过滤的条件发生变化,都会带来对所有控制的变更。
        灵活和简单的解决方法就是用一种简单的可增减组件的机制,使得每个组件完成特殊的过滤请求。
        (原文:
        The key to solving this problem in a flexible and unobtrusive manner is to have a simple mechanism for adding and removing processing components, in which each component completes a specific filtering action.)
        贴个Filter

public class StandardEncodeFilter extends BaseEncodeFilter {
// Creates new StandardEncodeFilter
  public StandardEncodeFilter() { }
  
public void doFilter
   (javax.servlet.ServletRequest               
    servletRequest,
    javax.servlet.ServletResponse
    servletResponse,
    javax.servlet.FilterChain
    filterChain) 
   throws java.io.IOException,
   javax.servlet.ServletException {
     String contentType 
=
     servletRequest.getContentType();
     
if ((contentType == null||
     contentType.equalsIgnoreCase(
     
"application/x-www-form-urlencoded")) {
     translateParamsToAttributes
     (servletRequest,servletResponse);
     }
     filterChain.doFilter(servletRequest,
     servletResponse);
  }

  
private void translateParamsToAttributes(
  ServletRequest request, 
  ServletResponse   response){
    Enumeration paramNames 
= 
    request.getParameterNames();
    
while (paramNames.hasMoreElements()) {
      String paramName 
= (String)
      paramNames.nextElement();
      String [] values;
      values 
= request.getParameterValues
       (paramName);
      System.err.println(
"paramName = "
       
+ paramName);
      
if (values.length == 1)
       request.setAttribute(paramName,
        values[
0]);
      
else
       request.setAttribute(paramName, values);
    }
  }
}
posted on 2005-09-08 14:34 风萧萧 阅读(174) 评论(0)  编辑  收藏 所属分类: J2EE Patterns

只有注册用户登录后才能发表评论。


网站导航: