2014-09-25 106 views
0

我不是一個真正的java開發人員,但我目前正在開發一個需要一些java技能的項目。我從Cyber​​source獲得了示例代碼來實現他們的安全驗收付款,但如果我按原樣使用代碼,則會遇到問題。我認爲ArrayList可能是問題。它不會編譯,但我看不到錯誤消息。我正在使用一個框架,它使得它看到錯誤信息是不同的。不知道如何只測試這部分代碼。我的ArrayList不能在jsp中工作

${ 
import sun.misc.BASE64Encoder; 
import javax.crypto.Mac; 
import javax.crypto.spec.SecretKeySpec; 
import java.security.InvalidKeyException; 
import java.security.NoSuchAlgorithmException; 
import java.io.UnsupportedEncodingException; 
import java.util.ArrayList; 
import java.util.Iterator; 

    private String sign(HashMap params) throws InvalidKeyException, NoSuchAlgorithmException, { 
     return sign(buildDataToSign(params), "111111111111111"); 
    } 

    private String sign(String data, String secretKey) throws InvalidKeyException, NoSuchAlgorithmException, UnsupportedEncodingException { 
     SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(), "HmacSHA256"); 
     Mac mac = Mac.getInstance("HmacSHA256"); 
     mac.init(secretKeySpec); 
     byte[] rawHmac = mac.doFinal(data.getBytes("UTF-8")); 
     BASE64Encoder encoder = new BASE64Encoder(); 
     return encoder.encodeBuffer(rawHmac).replace("\n", ""); 
    } 

    private String buildDataToSign(HashMap params) { 
     String[] signedFieldNames = String.valueOf(params.get("signed_field_names")).split(","); 
     ArrayList<String> dataToSign = new ArrayList<String>(); 
     for (String signedFieldName : signedFieldNames) { 
      dataToSign.add(signedFieldName + "=" + String.valueOf(params.get(signedFieldName))); 
     } 
     return commaSeparate(dataToSign); 
    } 

    private String commaSeparate(ArrayList<String> dataToSign) { 
     StringBuilder csv = new StringBuilder(); 
     for (Iterator<String> it = dataToSign.iterator(); it.hasNext();) { 
      csv.append(it.next()); 
      if (it.hasNext()) { 
       csv.append(","); 
      } 
     } 
     return csv.toString(); 
    } 
}$ 
+3

我不認爲這是將Java嵌入到JSP中的正確方法。或者,不要將Java嵌入到JSP中。 – Makoto 2014-09-25 03:23:55

+0

什麼是「$ {」符號?通常我們使用scriplet標記<%在JSP中啓動一段Java代碼。其次,你在JSP中創建一個類嗎?通常我們不會在JSP中創建類...請參閱http://www.fiveminutes.eu/java-code-inside-jsp-page/ – Rudy 2014-09-25 03:24:00

+0

@Rudy:這可能是表達式的開始。 – Makoto 2014-09-25 03:31:19

回答

3

你需要做的是在一個普通的java文件中創建一個類,然後它導入到你的JSP是這樣的:

<%@ page import="com.yourcompany.package.ClassName" %> 

,你將能夠從你的JSP訪問任何方法文件,打印變量等。使用<%代碼>標記。例如:

<p>The sign response is <%= sign("test", "ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=") %></p>