other reference :http://quicker.iteye.com/category/93278
1. Applet Java class: CryptoApplet.java
2. 编译后,将class 放在某个目录下,这里放在jsp file的相同路径
3. JSP 引用: 包括 js , html , applet definition
1. CryptoApplet.java
import java.applet.*;
import java.io.*;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import com.bcsis.waf.logger.LogConstant;
import com.bcsis.waf.logger.Logger;
import com.bcsis.waf.logger.LoggerManager;
import netscape.javascript.*;
public class CryptoApplet extends Applet {
private static Logger logger = LoggerManager.getInstance().getLogger(
LogConstant.APP_LOGGER);
…………
@Override
public void start() {
}
@Override
public void stop() {
System.out.println("stopping");
logger.warn("snow applet logger :CryptoApplet : " + "stopping");
}
@Override
public void destroy() {
System.out.println("destroying");
logger.warn("snow applet logger :CryptoApplet : " + "destroying");
}
public String getJavaVersion() {
return System.getProperty("java.version");
}
private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
private static String byteArrayToHexString(byte[] b) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++) {
resultSb.append(byteToHexString(b[i]));
}
return resultSb.toString();
}
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n = 256 + n;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
/* digests */
public String md5(String s) throws Exception {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] results = md.digest(s.getBytes("UTF-8"));
String resultString = byteArrayToHexString(results);
System.out.println("=== string digest aft : " + resultString);
return resultString.toUpperCase();
} catch (Exception e) {
return null;
}
}
}
2. JSP & Java Script ,取值以及往后台传值
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<script type="text/javascript" src="shatest.js"></script>
<script>
function compute () {
var str=window.document.forms[0].password.value;
var md5 = document.crypto.md5(str);
window.document.getElementById('encryptedPassword').value = "Prefix_XXX" + md5;
alert("lala md5 : " + md5 ) ;
}
</script>
<!-- Start of Login section -->
<egiro:javascript formName="bankLoginForm" cdata="false" />
<html:form method="POST" action="/banklogin" οnsubmit="return validateBankLoginForm(this)">
<input type="hidden" id="encryptedPassword" name="encryptedPassword" value="qwe" />
<div align="center">
<div class="formtitle">
<bean:message bundle="appResource" key="label.password" />
</div>
<div class="formfield">
<html:password property="password" size="20" redisplay="false" styleClass="inputBox" redisplay="false" />
</div>
<div>
<html:submit styleClass="button" property="submit" οnclick="javascript:return compute();">
<bean:message bundle="appResource" key="button.login" />
</html:submit>
</div>
</div>
<applet name="crypto" code="CryptoApplet" archive="cryptoapplet.jar" width="0" height="0" mayscript="true">
<param name="debug" value="true" />
<param name="raiseExceptions" value="false" />
No Java support for APPLET!!
</applet>
</html:form>
<!-- End of Login Section -->
-----------------------------------------------
1) Js : <script>
function compute () {
var str=window.document.forms[0].password.value;
var md5 = document.crypto.md5(str);
window.document.getElementById('encryptedPassword').value = "Prefix_XXX" + md5;
alert("lala md5 : " + md5 ) ;
}
2) Calling js :
<div><html:submit styleClass="button" property="submit" οnclick="javascript:return compute();">
<bean:message bundle="appResource" key="button.login" />
</html:submit>
</div>
</script>
3) Applet definition
<applet name="crypto" code="CryptoApplet" archive="cryptoapplet.jar" width="0" height="0" mayscript="true">
<param name="debug" value="true" />
<param name="raiseExceptions" value="false" /> No Java support for APPLET!!
</applet>
Notes:
1. In jsp, use js function compute () to call the applet
2. Applet definition : <applet name="crypto" code="CryptoApplet" archive="cryptoapplet.jar" width="0" height="0" mayscript="true">
name : applet name 就是js中call
code :Applet class的路径,这样写意味着applet class 和该jsp 在同一目录下
3. 把值放在hidden 变量'encryptedPassword'里,后台可以从request取window.document.getElementById('encryptedPassword').value = "Prefix_XXX" + md5;