2013-04-23 72 views
1

我想实现一个POST调用虚拟POS进行卡支付操作。 POS仅仅是银行提供的服务器程序,必须通过具有交易数据的表单进行访问。这可以通过组合一个表单,方法帖子和一组隐藏参数来完成,然后将输出定位到一个新窗口(这是必需的,因为从这一点开始,银行软件才能控制)。 但是,对于安全问题,我想从支持bean进行POST调用。 因此:JSF支持bean的POS支付

  1. 我的facelet中的一个按钮调用RequestScoped bean中的方法。这个bean可以访问会话中的事务数据。
  2. 这个bean创造了一些东西。
  3. Inside该方法,我可以打开一个URLConnection,添加参数,然后调用银行的程序(我认为它是一个servlet)。
  4. 无论此servlet的输出如何,它都必须重定向到客户端的新窗口。这个新窗口将包含认证和实际支付的东西,但它是银行的软件。

这将是通过使用JSF来实现该行为的正确模式?

在此先感谢。

+0

我不确定目标是什么。银行网站软件“必须控制”,但你也想从服务器端控制这个?当您将表单POST提交给银行服务器时,那么付款尚未提交?有没有办法在POST中传递验证委托人和付款信息? – 2013-04-23 11:30:52

+0

发送给银行servlet的表单只传递金额,订单ID和一些可选数据。此呼叫的输出必须重定向到新窗口。并从该窗口进行身份验证和卡片插入,以及最终付款。所以,我的应用程序不需要存储(甚至读取)卡信息。 – Carlos 2013-04-23 17:40:27

回答

0

我想我现在明白了,您希望将银行servlet功能集成到您的JSF应用程序中,但不想打扰PCI合规性。

重定向是一个HTTP服务器响应代码,指定执行GET的URL,因此您无法重定向表单POST的响应。

您也不希望以编程方式将此POST请求从服务器端传递到银行servlet并呈现收到的响应,因为您已经启动了与银行servlet分开的会话,而不是用户与您的Web之间存在的会话应用。这实际上是一个严重的安全问题。

除非服务器正在处理与银行servlet的所有HTTP通信,否则无法通过JSF启动该银行Servlet会话。

在您的情况下,我会这样做的方式是使用Javascript打开一个带有常规HTML表单的新窗口,并将表单的操作设置为银行servlet URL,并使该表单的初始输入匹配HTTP帖子所需的参数名称。当提交此HTML表单时,SSL证书将与用户浏览器进行协商,并且POST响应将被呈现,而无需任何涉及您的Web应用程序的任何内容。客户端将维护两个单独的会话,您的应用程序的会话以及银行Servlet的会话。

这是一种安全的方式,它不会在您的Web应用程序上提出任何PCI合规性要求。

+0

你是对的。所有这些都是由银行自己设计的,以避免必须在客户端应用程序中实施PCI内容。你说的方式是正常(而且容易)的方法。如果我想从后台bean那里做是因为我不想从页面源代码中看到params和bank servlet url本身。这些参数是隐藏的,但任何人都可以查看参数,包括为该事务生成的安全密钥。这不是一个更糟糕的安全漏洞吗? – Carlos 2013-04-24 08:10:31

+0

@Carlos可能但只有客户端计算机才会收到验证密钥。关于登录我银行的网络应用程序以查看我的家用计算机上的支票帐户余额,我可以提出相同的论点。不同的是,如果银行应用程序使用SSL证书,那么只有银行应用程序和我的浏览器才能读取该验证密钥或信用卡号码。如果有人正在监视我的网络流量,它将被加密。续... – 2013-04-24 08:59:23

+0

...续我同意,尽管从服务器与银行进行所有通信是最好的方法,但是**您的**应用程序需要符合PCI标准,因为信用卡信息将传递给您。 – 2013-04-24 09:00:42