`
tangkuo
  • 浏览: 100476 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Filter

hhh 
阅读更多
package com.tk.ipp2.accessgateway.base;

import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

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;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.alibaba.dubbo.common.utils.StringUtils;
import com.tk.dpp.csp.api.enums.InterfaceVersion;
import com.tk.dpp.csp.api.response.FindMerchantResponse;
import com.tk.dpp.csp.api.response.ServiceResponse;
import com.tk.dpp.csp.client.MerchantAuthService;
import com.tk.dpp.domain.member.merchant.Merchant;
import com.tk.ipp2.accessgateway.util.Util;
import com.tk.commons.file.FileUtil;

public class ConvertGatewayFilter implements Filter{
private static Log log = LogFactory.getLog(ConvertGatewayFilter.class);

private final static String OLD_VERSION = "oldVersion";
private final static String VERSION4 = "version4";
private final static String ERROR_PAGE = "errorPage";

//filter初始化值
private Map<String, String> initParamsMap = new HashMap<String, String>();

// 旧网关(2.0网关、3.0网关)地址
private String oldVersion = null;

// 4.0网关地址
private String version4 = null;

//检测到错误后的跳转页面
private String errorPage = null;

@Override
public void doFilter(ServletRequest servletrequest,
ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletrequest;
HttpServletResponse response = (HttpServletResponse) servletresponse;
request.setCharacterEncoding("UTF-8");
       
String servletPath = request.getServletPath();
if(servletPath.equals(oldVersion)){
String merchantCode = Util.getRequest(request, "merchant_code");
if(hasGatewayVersion4(merchantCode)){
forwardVersion4(request,response);
return ;
}
}
filterchain.doFilter(request, response);
}



protected String getResourcePath(HttpServletRequest request) {
        String pathInfo = FileUtil.normalizeAbsolutePath(request.getPathInfo(), false);
        String servletPath = FileUtil.normalizeAbsolutePath(request.getServletPath(), pathInfo.length() != 0);
        return servletPath + pathInfo;
    }

/**
* 判断商户是否开通4.0网关
* @param merchantCode
* @return
*/
protected boolean hasGatewayVersion4(String merchantCode){
log.info("hasGateWayVersion4 parameter merchant_code= " + merchantCode);
boolean has = false;
FindMerchantResponse fmResp = MerchantAuthService.findMerchant(merchantCode);
if (!ServiceResponse.RETCODE_SUCCESS.equals(fmResp.getRetCode())) {
has = false;
return has;
}

Merchant merchant = fmResp.getMerchant();
String gatewayVersion = merchant.getGatewayVersion();
if(InterfaceVersion.InterfaceVersion_V4.getVersion().equals(gatewayVersion)){
has = true;
}
return has;
}

protected void forwardVersion4(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
String queryStr = request.getQueryString();
String path = version4;
if(StringUtils.isNotEmpty(queryStr)){
path += "?" + queryStr;
}
request.getRequestDispatcher(path).forward(request, response);
}

@Override
public void destroy() {
// TODO Auto-generated method stub
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {
for (Enumeration<?> e = filterConfig.getInitParameterNames(); e.hasMoreElements();) {
            String key = (String) e.nextElement();
            String value = filterConfig.getInitParameter(key);
            initParamsMap.put(key, value);
        }
oldVersion = initParamsMap.get(OLD_VERSION);
version4 = initParamsMap.get(VERSION4);
errorPage = initParamsMap.get(ERROR_PAGE);
}

}


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<listener>
<listener-class>com.tk.ipp2.accessgateway.listener.IPPContextListener</listener-class>
</listener>

<filter>
<filter-name>paramsFilter</filter-name>
<filter-class>com.tk.commons.web.filter.ParamsFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<!-- 过滤掉所有静态资源 -->
<param-name>excludes</param-name>
<param-value>/css, /images, /image, /js, *.htm, *.html, *.css, *.js, *.jpg, *.gif, *.png</param-value>
</init-param>
<init-param>
<!-- 允许参数:中文 字母 数字 下划线 中划线 :/=&@,+|?.^'[]{} 及空格符 -->
<param-name>paramsRegex</param-name>
<param-value><![CDATA[[\u4e00-\u9fa5\\w-:/=&@,\\+\\|\\?\\.\\^\\!\\s'\\[\\]\\{\\}]*]]></param-value>
</init-param>
<init-param>
<param-name>errorPage</param-name>
<param-value>/ipp2/illegalRequest.jsp</param-value>
</init-param>
</filter>
<filter-mapping>  
  <filter-name>paramsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 商户网关转换过滤器(注意:这个过滤器没有处理字符编码,必须放在参数过滤器之后,不然存在中文乱码问题) -->
<filter>
<filter-name>convertGatewayFilter</filter-name>
<filter-class>com.tk.ipp2.accessgateway.base.ConvertGatewayFilter</filter-class>
<init-param>
<param-name>oldVersion</param-name>
<param-value>/gateway</param-value>
</init-param>
<init-param>
<param-name>version4</param-name>
<param-value>/ipp2/gateway</param-value>
</init-param>
<init-param>
<param-name>errorPage</param-name>
<param-value>/ipp2/illegalRequest.jsp</param-value>
</init-param>
</filter>
<filter-mapping>  
  <filter-name>convertGatewayFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>CheckZHBLoginServlet_IPP2</servlet-name>
<servlet-class>com.tk.ipp2.accessgateway.servlet.CheckZHBLoginServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>CheckPicNumberServlet_IPP2</servlet-name>
<servlet-class>com.tk.ipp2.accessgateway.servlet.CheckPicNumberServlet</servlet-class>
</servlet>

<servlet>
<servlet-name>ReceiveMerchantServlet_IPP2</servlet-name>
<servlet-class>com.tk.ipp2.accessgateway.servlet.ReceiveMerchantServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>CheckNumberServlet_IPP2</servlet-name>
<servlet-class>com.tk.ipp2.accessgateway.servlet.GetCheckNumberServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>GetEncryptRandomServlet_IPP2</servlet-name>
<servlet-class>com.tk.ipp2.accessgateway.servlet.GetEncryptRandomServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>PayServlet_IPP2</servlet-name>
<servlet-class>com.tk.ipp2.accessgateway.servlet.PayServlet</servlet-class>
</servlet>
  <servlet>
    <servlet-name>GetQrCodeServlet_ipp2</servlet-name>
    <servlet-class>com.tk.ipp2.accessgateway.servlet.GetQrCodeServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>PaymentCom_IPP2</servlet-name>
    <servlet-class>com.tk.ipp2.accessgateway.servlet.PaymentComServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>CheckExpressSignServlet</servlet-name>
    <servlet-class>com.tk.ipp2.accessgateway.servlet.CheckExpressSignServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>GetSmsCodeServlet_ipp2</servlet-name>
    <servlet-class>com.tk.ipp2.accessgateway.servlet.GetSmsCodeServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>QueryServlet_ipp2</servlet-name>
    <servlet-class>com.tk.ipp2.accessgateway.servlet.QueryServlet</servlet-class>
  </servlet>



<servlet-mapping>
<servlet-name>PayServlet_IPP2</servlet-name>
<url-pattern>/ipp2/Pay</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ReceiveMerchantServlet_IPP2</servlet-name>
<url-pattern>/ipp2/gateway</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CheckZHBLoginServlet_IPP2</servlet-name>
<url-pattern>/ipp2/checkZHBLogin</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CheckPicNumberServlet_IPP2</servlet-name>
<url-pattern>/ipp2/checkPicNumber</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CheckNumberServlet_IPP2</servlet-name>
<url-pattern>/ipp2/checkNumber</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GetEncryptRandomServlet_IPP2</servlet-name>
<url-pattern>/ipp2/getEncryptRandomRum</url-pattern>
</servlet-mapping>
  <servlet-mapping>
    <servlet-name>GetQrCodeServlet_ipp2</servlet-name>
    <url-pattern>/ipp2/GetQrCode</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>PaymentCom_IPP2</servlet-name>
    <url-pattern>/ipp2/PaymentCom</url-pattern>
  </servlet-mapping>


  <servlet-mapping>
    <servlet-name>CheckExpressSignServlet</servlet-name>
    <url-pattern>/ipp2/CheckExpressSign</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>GetSmsCodeServlet_ipp2</servlet-name>
    <url-pattern>/ipp2/GetSmsCode</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>QueryServlet_ipp2</servlet-name>
    <url-pattern>/ipp2/query</url-pattern>
  </servlet-mapping>
 
  <error-page>
<error-code>400</error-code>
<location>/ipp2/wrong_404.jsp</location>
</error-page>
<error-page>
<error-code>401</error-code>
<location>/ipp2/wrong_404.jsp</location>
</error-page>

<error-page>
<error-code>403</error-code>
<location>/ipp2/wrong_404.jsp</location>
</error-page>

<error-page>
<error-code>404</error-code>
<location>/ipp2/wrong_404.jsp</location>
</error-page>

<error-page>
<error-code>405</error-code>
<location>/ipp2/wrong_404.jsp</location>
</error-page>

<error-page>
<error-code>500</error-code>
<location>/ipp2/payfail.jsp</location>
</error-page>

<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/ipp2/payfail.jsp</location>
</error-page>

</web-app>
分享到:
评论

相关推荐

    cors-filter-2.5.jar

    标题中的“cors-filter-2.5.jar”是一个Java Web应用程序使用的库,专门用于处理跨域资源共享(CORS)的问题。CORS是一种机制,允许Web应用通过浏览器从不同源(即非同源策略允许的源)获取资源,以克服浏览器的同源...

    RF filter.rar_RF CBF filter_rf_Filter_rffilter_射频滤波器_滤波器 参数

    本资料“RF filter.rar”涵盖了射频滤波器设计的各种方面,包括低通滤波器、带通滤波器以及Chebyshev滤波器,这些都是射频滤波器的常见类型。 1. 射频低通滤波器:这种滤波器允许低频信号通过,而阻止高频信号。在...

    Servlet Filter 的单元测试

    Servlet Filter 是Java Servlet API中的一个重要组件,主要用于在Servlet处理请求之前或之后进行拦截处理,例如权限检查、日志记录、内容转换等。进行Servlet Filter的单元测试是确保Filter功能正确性和健壮性的重要...

    java filter打印请求返回参数

    ### Java Filter 打印请求返回参数详解 #### 一、背景与目的 在Web开发过程中,经常需要在请求处理流程中增加一些通用的功能,比如日志记录、性能监控、安全控制等。Java Servlet规范提供了Filter机制来实现这些...

    FilterPro使用指南

    TI公司开发的FilterPro是一款软件工具,旨在辅助工程师设计由多重反馈(MFB)和Sallen-Key拓扑结构实现的有源滤波器。它能够减少设计和验证有源滤波器时所耗费的时间和精力,这对于现代电子设计而言极为重要,因为...

    filter solutions 简易教程

    Filter Solutions 简易教程 Filter Solutions 是一种滤波器设计软件,旨在帮助用户快速设计和实现滤波器电路。下面是 filter solutions 简易教程的知识点总结: 一、Filter Solutions 软件简介 * Filter ...

    FilterPro TI滤波器设计 安装包

    **FilterPro TI滤波器设计软件详解** FilterPro是由美国Texas Instruments(TI)公司开发的一款专业滤波器设计工具,广泛应用于信号处理、通信、音频系统等领域。它为工程师提供了直观且高效的滤波器设计环境,能够...

    Datagrid-filter插件

    `Datagrid-filter`插件正是针对这种需求设计的,它是一个高效且实用的Grid插件,旨在提升数据网格的可操作性和用户交互性。这个插件的核心功能是为每一列提供过滤条件,使得用户能够快速筛选出所需的信息,极大地...

    java中filter的用法(过滤器)

    ### Java中的Filter(过滤器)使用详解 #### 一、Filter概述 在Java Web开发中,`Filter`是一种非常实用的技术,它可以在请求到达目标资源(如Servlet或JSP页面)之前进行预处理,或者在响应返回客户端之前进行后...

    cors-filter-1.7.jar,cors-filter-2.5.jar,cors-filter-2.10.jar

    标题中的“cors-filter-1.7.jar”,“cors-filter-2.5.jar”和“cors-filter-2.10.jar”是针对不同版本的CORS过滤器实现。这些jar包是专门为Tomcat设计的,用于处理跨域请求过滤,确保服务器能够安全地响应来自不...

    预防XSS攻击和SQL注入XssFilter

    &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; &lt;filter-class&gt;com.xxx.Filter.XssFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; &lt;url-pattern&gt;/* &lt;/filter-mapping&gt;

    filter wiz pro v5

    Filter Wiz Pro适用于低于-1Hz 至10MHz 范围内的截止频率,而适用于此范围的无源滤波器设计必须具备非常大的组件值和组件尺寸  Filter Wiz Pro在几分钟内便能让您设计、优化和仿真一套完整的多级有源滤波器解决方案...

    Filter过滤器的代码及其web.xml配置代码

    在Java Web开发中,Filter(过滤器)是一个非常重要的组件,它允许我们在数据处理之前或之后执行特定的任务,比如防止跨站脚本攻击(XSS)、处理字符编码问题、实现权限控制等。在这个主题中,我们将深入理解Filter的...

    FilterPro 安装及基本教程中英文

    FilterPro是一款由德州仪器(TI)开发的专业有源滤波器设计软件,它为电子工程师提供了强大而便捷的工具,用于模拟和优化滤波器设计。本教程将涵盖FilterPro的安装过程以及基本的使用方法,包括Sallen-Key滤波器和多...

    FilterBuilder过滤器

    在IT领域,尤其是在Web开发中,`FilterBuilder`是一个重要的工具,它允许用户构建自定义的查询和过滤条件,以动态地筛选数据。这个组件通常用于数据量大、需要复杂查询逻辑的应用场景,如数据分析、报表展示或者管理...

    imu_filter_madgwick_IMU滤波_filter_imu_filter_madgwick_IMU_IMU滤波_源

    标题中的“imu_filter_madgwick”指的是Madgwick滤波算法,这是一类用于惯性测量单元(IMU)数据处理的算法,主要用于融合来自陀螺仪和加速度计的数据,以消除噪声和漂移,提高传感器测量的稳定性和准确性。...

    filter pro 有源滤波器设计软件 TI公司

    **Filter Pro 有源滤波器设计软件:TI公司的创新工具** Filter Pro是一款由美国德州仪器(TI)公司开发的专业有源滤波器设计软件。TI作为全球知名的半导体和集成电路制造商,其产品线广泛,包括各种模拟和数字解决...

    FilterPro(滤波器设计软件)

    **FilterPro滤波器设计软件详解** FilterPro是一款专业级的滤波器设计软件,它以其用户友好的界面和高效的设计工具,深受电子工程师和研究人员的喜爱。该软件主要用于设计、分析和优化各种类型的滤波器,包括模拟...

    filter对request请求拦截,对请求参数进行修改

    对request请求进行拦截,... &lt;filter-class&gt;weixin.idea.waiting.cq.controller.JsFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;sqlFilter&lt;/filter-name&gt; &lt;url-pattern&gt;/* &lt;/filter-mapping&gt;

    java 中如何使用filter过滤器

    在Java Web开发中,Filter(过滤器)是一个强大的工具,它允许开发者在数据处理的前后进行拦截和修改。本文将详细介绍如何在Java中使用Filter过滤器,以及如何配置相关的配置文件,让你一目了然。 ### 1. Filter...

Global site tag (gtag.js) - Google Analytics