锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲熟妇无码乱子AV电影,亚洲爱情岛论坛永久,亚洲熟女综合色一区二区三区http://www2.blogjava.net/neumqp/category/4361.htmlzh-cnTue, 03 Jul 2007 17:11:52 GMTTue, 03 Jul 2007 17:11:52 GMT60filter寰楀埌request鐨刡ody/contenthttp://www.tkk7.com/neumqp/archive/2006/10/25/77235.html灝忛搧鍖?/dc:creator>灝忛搧鍖?/author>Wed, 25 Oct 2006 09:01:00 GMThttp://www.tkk7.com/neumqp/archive/2006/10/25/77235.htmlhttp://www.tkk7.com/neumqp/comments/77235.htmlhttp://www.tkk7.com/neumqp/archive/2006/10/25/77235.html#Feedback0http://www.tkk7.com/neumqp/comments/commentRss/77235.htmlhttp://www.tkk7.com/neumqp/services/trackbacks/77235.html
聽聽聽 public void doFilter(ServletRequest request, ServletResponse response,
聽聽聽聽聽聽聽聽聽聽聽 FilterChain chain) throws IOException, ServletException {

聽聽聽聽聽聽聽 HttpServletRequest req = (HttpServletRequest) request;

聽聽聽聽聽聽聽 int length = req.getContentLength();
聽聽聽聽聽聽聽 if (length > 0) {
聽聽聽聽聽聽聽聽聽聽聽 BufferedRequestWrapper bufferedRequest = new BufferedRequestWrapper(req,length);

聽聽聽聽聽聽聽聽聽聽聽 InputStream is = bufferedRequest.getInputStream();
聽聽聽聽聽聽聽聽聽聽聽 byte[] content = new byte[length];
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽 int pad = 0;
聽聽聽聽聽聽聽聽聽聽聽 while(pad < length){
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 pad += is.read(content, pad, length);
聽聽聽聽聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽聽聽聽聽聽request = bufferedRequest;
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 chain.doFilter(request, response);聽聽聽聽聽聽
聽聽聽 }


BufferedRequestWrapper .java

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class BufferedRequestWrapper extends HttpServletRequestWrapper {

聽聽聽 ByteArrayInputStream bais;

聽聽聽 BufferedServletInputStream bsis;

聽聽聽 byte[] buffer;

聽聽聽 public BufferedRequestWrapper(HttpServletRequest req,int length) throws IOException {
聽聽聽聽聽聽聽 super(req);
聽聽聽聽聽聽聽 // Read InputStream and store its content in a buffer.
聽聽聽聽聽聽聽 InputStream is = req.getInputStream();
聽聽聽聽聽聽聽 buffer = new byte[length];

聽聽聽聽聽聽聽 int pad = 0;
聽聽聽聽聽聽聽 while(pad < length){
聽聽聽聽聽聽聽聽聽聽聽 pad += is.read(buffer, pad, length);
聽聽聽聽聽聽聽 }
聽聽聽 }

聽聽聽 public ServletInputStream getInputStream() {
聽聽聽聽聽聽聽 try {
聽聽聽聽聽聽聽聽聽聽聽 // Generate a new InputStream by stored buffer
聽聽聽聽聽聽聽聽聽聽聽 bais = new ByteArrayInputStream(buffer);
聽聽聽聽聽聽聽聽聽聽聽 // Istantiate a subclass of ServletInputStream
聽聽聽聽聽聽聽聽聽聽聽 // (Only ServletInputStream or subclasses of it are accepted by the
聽聽聽聽聽聽聽聽聽聽聽 // servlet engine!)
聽聽聽聽聽聽聽聽聽聽聽 bsis = new BufferedServletInputStream(bais);
聽聽聽聽聽聽聽 } catch (Exception ex) {
聽聽聽聽聽聽聽聽聽聽聽 ex.printStackTrace();
聽聽聽聽聽聽聽 } finally {
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 return bsis;
聽聽聽 }

}




BufferedServletInputStream .java

import java.io.*;
import javax.servlet.ServletInputStream;

/*
聽Subclass of ServletInputStream needed by the servlet engine.
聽All inputStream methods are wrapped and are delegated to
聽the ByteArrayInputStream (obtained as constructor parameter)!
聽*/
public class BufferedServletInputStream extends ServletInputStream {

聽聽聽 ByteArrayInputStream bais;

聽聽聽 public BufferedServletInputStream(ByteArrayInputStream bais) {
聽聽聽聽聽聽聽 this.bais = bais;
聽聽聽 }

聽聽聽 public int available() {
聽聽聽聽聽聽聽 return bais.available();
聽聽聽 }

聽聽聽 public int read() {
聽聽聽聽聽聽聽 return bais.read();
聽聽聽 }

聽聽聽 public int read(byte[] buf, int off, int len) {
聽聽聽聽聽聽聽 return bais.read(buf, off, len);
聽聽聽 }

}



]]>
java 鍙憁ailhttp://www.tkk7.com/neumqp/archive/2006/05/10/45516.html灝忛搧鍖?/dc:creator>灝忛搧鍖?/author>Wed, 10 May 2006 10:02:00 GMThttp://www.tkk7.com/neumqp/archive/2006/05/10/45516.htmlhttp://www.tkk7.com/neumqp/comments/45516.htmlhttp://www.tkk7.com/neumqp/archive/2006/05/10/45516.html#Feedback0http://www.tkk7.com/neumqp/comments/commentRss/45516.htmlhttp://www.tkk7.com/neumqp/services/trackbacks/45516.html鏈夊彂閫佷漢鍚嶇О涓枃鏀寔錛屾敮鎸乥ytes鏍煎紡闄勪歡錛岄檮浠朵腑鏂囨敮鎸?br />
聽 public static boolean send(String fromName, String fromAddr, String to, String subject, String
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 body, String fileName, byte[] file) throws
聽聽聽聽聽 Exception {
聽聽聽聽聽聽聽 //鍙戦佷漢鍚嶇О錛岀敤base64緙栫爜錛屽啀鍔犱笂鐗規畩鏍囧織
聽聽聽聽聽聽聽 fromName = "=?GB2312?B?" + new String(base64.encode((fromName).getBytes()))聽 + "?=";
聽聽聽 Properties props = new Properties();
聽聽聽 Session session = Session.getInstance(props, null);
聽聽聽 props.put("mail.smtp.host", Constants.mailhost);
聽聽聽 props.put("mail.smtp.auth", "false");聽
聽聽聽 Message msg = new MimeMessage(session);
聽聽聽聽聽 msg.setFrom(new InternetAddress(fromAddr,fromName));
//鍚庨潰鐨凚odyPart灝嗗姞鍏ュ埌姝ゅ鍒涘緩鐨凪ultipart涓?br />聽聽聽 Multipart mp = new MimeMultipart();
// Create the message part
聽聽聽 BodyPart messageBodyPart = new MimeBodyPart();

聽聽聽 // Fill the message
聽聽聽 messageBodyPart.setText(body);

聽聽聽 mp.addBodyPart(messageBodyPart);

聽聽聽聽聽 /*鍙戦侀檮浠?/
聽聽聽聽 if (file != null && file.length > 0) {
聽聽聽聽聽聽 //鍒╃敤鏋氫婦鍣ㄦ柟渚跨殑閬嶅巻闆嗗悎
聽聽聽聽聽聽聽聽 MimeBodyPart mbp = new MimeBodyPart();聽
//聽聽聽聽聽聽聽聽 File fileTmp = null;
聽聽聽聽聽聽聽聽 //寰楀埌鏁版嵁婧?br />//聽聽聽聽聽聽聽聽 FileDataSource fds = new FileDataSource(fileTmp);
聽聽聽聽聽聽聽聽 //寰楀埌闄勪歡鏈韓騫惰嚦鍏odyPart
聽聽聽聽聽聽聽聽 mbp.setDataHandler(new DataHandler(new ByteArrayDataSource(file,"application/octet-stream")));
聽聽聽聽聽聽聽聽 //寰楀埌鏂囦歡鍚嶅悓鏍瘋嚦鍏odyPart
聽聽聽聽聽聽聽聽 mbp.setFileName(MimeUtility.encodeWord(fileName,"GB2312",null));
聽聽聽聽聽聽聽聽 mp.addBodyPart(mbp);
聽聽聽聽 }
聽聽聽
聽聽聽 //Multipart鍔犲叆鍒頒俊浠?br />聽聽聽 msg.setContent(mp);

聽聽聽 msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
聽聽聽 msg.setSubject(subject);

聽聽聽 msg.setHeader("X-Mailer", "personal Email Sender");
聽聽聽 msg.setSentDate(new Date());

聽聽聽 Transport transport = session.getTransport("smtp");

聽聽聽 //娣誨姞璁よ瘉淇℃伅
聽聽聽 transport.connect(Constants.mailhost, Constants.user, Constants.pwd);
聽聽聽 transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO));
聽聽聽 transport.close();
聽聽聽 return true;
聽 }




import java.io.*;
import javax.activation.*;

public class ByteArrayDataSource implements DataSource {
聽聽聽 /** * Data to write. */
聽聽聽 private byte[] _data;

聽聽聽 /** * Content-Type. */
聽聽聽 private String _type;

聽聽聽 /* Create a datasource from an input stream */
聽聽聽 public ByteArrayDataSource(InputStream is, String type) {
聽聽聽聽聽聽聽 _type = type;
聽聽聽聽聽聽聽 try {
聽聽聽聽聽聽聽聽聽聽聽 ByteArrayOutputStream os = new ByteArrayOutputStream();
聽聽聽聽聽聽聽聽聽聽聽 int ch;

聽聽聽聽聽聽聽聽聽聽聽 // XXX : must be made more efficient by
聽聽聽聽聽聽聽聽聽聽聽 // doing buffered reads, rather than one byte reads
聽聽聽聽聽聽聽聽聽聽聽 while ((ch = is.read()) != -1)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 os.write(ch);
聽聽聽聽聽聽聽聽聽聽聽 _data = os.toByteArray();
聽聽聽聽聽聽聽 } catch (IOException ioe) {
聽聽聽聽聽聽聽 }
聽聽聽 }

聽聽聽 /* Create a datasource from a byte array */
聽聽聽 public ByteArrayDataSource(byte[] data, String type) {
聽聽聽聽聽聽聽 _data = data;
聽聽聽聽聽聽聽 _type = type;
聽聽聽 }

聽聽聽 /* Create a datasource from a String */
聽聽聽 public ByteArrayDataSource(String data, String type) {
聽聽聽聽聽聽聽 try {
聽聽聽聽聽聽聽聽聽聽聽 // Assumption that the string contains only ascii
聽聽聽聽聽聽聽聽聽聽聽 // characters ! Else just pass in a charset into this
聽聽聽聽聽聽聽聽聽聽聽 // constructor and use it in getBytes()
聽聽聽聽聽聽聽聽聽聽聽 _data = data.getBytes("iso-8859-1");
聽聽聽聽聽聽聽 } catch (UnsupportedEncodingException uee) {
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 _type = type;
聽聽聽 }

聽聽聽 public InputStream getInputStream() throws IOException {
聽聽聽聽聽聽聽 if (_data == null)
聽聽聽聽聽聽聽聽聽聽聽 throw new IOException("no data");
聽聽聽聽聽聽聽 return new ByteArrayInputStream(_data);
聽聽聽 }

聽聽聽 public OutputStream getOutputStream() throws IOException {
聽聽聽聽聽聽聽 throw new IOException("cannot do this");
聽聽聽 }

聽聽聽 public String getContentType() {
聽聽聽聽聽聽聽 return _type;
聽聽聽 }

聽聽聽 public String getName() {
聽聽聽聽聽聽聽 return "dummy";
聽聽聽 }
}



]]>
log4j璧勬枡http://www.tkk7.com/neumqp/archive/2006/03/09/34478.html灝忛搧鍖?/dc:creator>灝忛搧鍖?/author>Thu, 09 Mar 2006 07:08:00 GMThttp://www.tkk7.com/neumqp/archive/2006/03/09/34478.htmlhttp://www.tkk7.com/neumqp/comments/34478.htmlhttp://www.tkk7.com/neumqp/archive/2006/03/09/34478.html#Feedback0http://www.tkk7.com/neumqp/comments/commentRss/34478.htmlhttp://www.tkk7.com/neumqp/services/trackbacks/34478.htmlhttp://dev.csdn.net/article/82070.shtm
http://blog.csdn.net/lxblg/archive/2004/09/14/104207.aspx

]]>
rmi鎵句笉鍒皊tub闂http://www.tkk7.com/neumqp/archive/2006/03/08/34203.html灝忛搧鍖?/dc:creator>灝忛搧鍖?/author>Wed, 08 Mar 2006 03:20:00 GMThttp://www.tkk7.com/neumqp/archive/2006/03/08/34203.htmlhttp://www.tkk7.com/neumqp/comments/34203.htmlhttp://www.tkk7.com/neumqp/archive/2006/03/08/34203.html#Feedback0http://www.tkk7.com/neumqp/comments/commentRss/34203.htmlhttp://www.tkk7.com/neumqp/services/trackbacks/34203.html鍚姩server鏃跺鏋滈亣鍒版壘涓嶅埌stub闂錛屽師鍥犳槸rmiregistry鎵句笉鍒皊tub錛岃屼笉鏄痡ava com.Server鎵句笉鍒皊tub錛岃В鍐蟲柟娉曪紝鍦╯tub鐨勭被鍚屼竴涓洰褰曚笅鍚姩rmiregistry



]]>
jni鍐呭瓨娉勯湶http://www.tkk7.com/neumqp/archive/2006/03/02/33152.html灝忛搧鍖?/dc:creator>灝忛搧鍖?/author>Thu, 02 Mar 2006 03:23:00 GMThttp://www.tkk7.com/neumqp/archive/2006/03/02/33152.htmlhttp://www.tkk7.com/neumqp/comments/33152.htmlhttp://www.tkk7.com/neumqp/archive/2006/03/02/33152.html#Feedback0http://www.tkk7.com/neumqp/comments/commentRss/33152.htmlhttp://www.tkk7.com/neumqp/services/trackbacks/33152.html銆傚鏋滆繑鍥瀓ava涓嶅繀release錛宩ava浼氳嚜宸卞洖鏀躲?BR>
 jstring jstr = env->NewStringUTF((*p).sess_id);
   ...
 env->DeleteLocalRef( jstr);

jobject jobj = env->NewObject(clazz,midInit);
return jobj;

鍐呭瓨娉勯湶鍙互鍏堜粠windows璧勬簮綆$悊鍣ㄤ腑錛岀湅鍒伴殢紼嬪簭榪愯錛屽唴瀛樹笉鏂闀跨殑瓚嬪娍錛屽叿浣撳彲浠ョ敤hp jmeter媯嫻?STRONG>銆?/STRONG>鍦ㄨ繍琛岀▼搴忔椂錛屽姞jvm鍙傛暟 -Xrunhprof:heap=all,cutoff=0 錛岀敓鎴恓ava.hprof.txt錛岀敤jmeter鎵撳紑錛?STRONG>Metric -> Residual Objects (Count)錛屽彲浠ョ湅鍒版湭鍥炴敹鐨勫璞★紝閫変腑瑕佹煡鐪嬬殑瀵硅薄錛岀偣Mark璁板綍涓嬭鏌ョ湅鐨勫璞★紝Window -> New Window 鎵撳紑鏂扮獥鍙o紝鐢?STRONG>Metric -> Reference Graph Tree錛?/STRONG>鐒跺悗鐐?STRONG>Find Immediately鍙互鐪嬪埌瀵硅薄琚摢閲屽紩鐢ㄣ?BR>

鎵懼嚭鍐呭瓨娉勬紡鍙︿竴鏂規硶

紼嬪簭鏈夊唴瀛樻硠婕忕殑絎竴涓抗璞¢氬父鏄畠鎶涘嚭涓涓?OutOfMemoryError錛屾垨鑰呭洜涓洪綣佺殑鍨冨溇鏀墮泦鑰岃〃鐜板嚭緋熺硶鐨勬ц兘銆傚垢榪愮殑鏄紝鍨冨溇鏀墮泦鍙互鎻愪緵鑳藉鐢ㄦ潵璇婃柇鍐呭瓨娉勬紡鐨勫ぇ閲忎俊鎭傚鏋滀互 -verbose:gc 鎴栬?-Xloggc 閫夐」璋冪敤 JVM錛岄偅涔堟瘡嬈?GC 榪愯鏃跺湪鎺у埗鍙頒笂鎴栬呮棩蹇楁枃浠朵腑浼氭墦鍗板嚭涓涓瘖鏂俊鎭紝鍖呮嫭瀹冩墍鑺辮垂鐨勬椂闂淬佸綋鍓嶅爢浣跨敤鎯呭喌浠ュ強鎭㈠浜嗗灝戝唴瀛樸傝褰?GC 浣跨敤鎯呭喌騫朵笉鍏鋒湁騫叉壈鎬э紝鍥犳濡傛灉闇瑕佸垎鏋愬唴瀛橀棶棰樻垨鑰呰皟浼樺瀮鍦炬敹闆嗗櫒錛屽湪鐢熶駭鐜涓粯璁ゅ惎鐢?GC 鏃ュ織鏄煎緱鐨勩?

鏈夊伐鍏峰彲浠ュ埄鐢?GC 鏃ュ織杈撳嚭騫朵互鍥懼艦鏂瑰紡灝嗗畠鏄劇ず鍑烘潵錛孞Tune 灝辨槸榪欐牱鐨勪竴縐嶅伐鍏鳳紙璇峰弬闃?鍙傝冭祫鏂?/FONT>錛夈傝瀵?GC 涔嬪悗鍫嗗ぇ灝忕殑鍥撅紝鍙互鐪嬪埌紼嬪簭鍐呭瓨浣跨敤鐨勮秼鍔褲傚浜庡ぇ澶氭暟紼嬪簭鏉ヨ錛屽彲浠ュ皢鍐呭瓨浣跨敤鍒嗕負涓ら儴鍒嗭細baseline 浣跨敤鍜?current load 浣跨敤銆傚浜庢湇鍔″櫒搴旂敤紼嬪簭錛宐aseline 浣跨敤灝辨槸搴旂敤紼嬪簭鍦ㄦ病鏈変換浣曡礋鑽楓佷絾鏄凡緇忓噯澶囧ソ鎺ュ彈璇鋒眰鏃剁殑鍐呭瓨浣跨敤錛宑urrent load 浣跨敤鏄湪澶勭悊璇鋒眰榪囩▼涓嬌鐢ㄧ殑銆佷絾鏄湪璇鋒眰澶勭悊瀹屾垚鍚庝細閲婃斁鐨勫唴瀛樸傚彧瑕佽礋鑽峰ぇ浣撲笂鏄亽瀹氱殑錛屽簲鐢ㄧ▼搴忛氬父浼氬緢蹇揪鍒頒竴涓ǔ瀹氱殑鍐呭瓨浣跨敤姘村鉤銆傚鏋滃湪搴旂敤紼嬪簭宸茬粡瀹屾垚浜嗗叾鍒濆鍖栧茍涓旇礋鑽鋒病鏈夊鍔犵殑鎯呭喌涓嬶紝鍐呭瓨浣跨敤鎸佺畫澧炲姞錛岄偅涔堢▼搴忓氨鍙兘鍦ㄥ鐞嗗墠闈㈢殑璇鋒眰鏃朵繚鐣欎簡鐢熸垚鐨勫璞°?


鍥?1 鏄劇ず  GC 涔嬪悗搴旂敤紼嬪簭鍫嗗ぇ灝忛殢鐫鏃墮棿鐨勫彉鍖栧浘銆備笂鍗囪秼鍔挎槸瀛樺湪鍐呭瓨娉勬紡鐨勮紺轟俊鍙楓傦紙鍦ㄧ湡瀹炵殑搴旂敤紼嬪簭涓紝鍧″害涓嶄細榪欎箞澶э紝浣嗘槸鍦ㄦ敹闆嗕簡瓚沖闀挎椂闂寸殑 GC 鏁版嵁鍚庯紝涓婂崌瓚嬪娍閫氬父浼氳〃鐜板緱寰堟槑鏄俱傦級


鍥?1. 鎸佺畫涓婂崌鐨勫唴瀛樹嬌鐢ㄨ秼鍔?/B>

紜俊鏈変簡鍐呭瓨娉勬紡鍚庯紝涓嬩竴姝ュ氨鏄壘鍑哄摢縐嶅璞¢犳垚浜嗚繖涓棶棰樸傛墍鏈夊唴瀛樺垎鏋愬櫒閮藉彲浠ョ敓鎴愭寜鐓у璞$被榪涜鍒嗚В鐨勫爢蹇収銆傛湁涓浜涘緢濂界殑鍟嗕笟鍫嗗垎鏋愬伐鍏鳳紝浣嗘槸鎵懼嚭鍐呭瓨娉勬紡涓嶄竴瀹氳鑺遍挶涔拌繖浜涘伐鍏?鈥斺?鍐呯疆鐨?hprof 宸ュ叿涔熷彲瀹屾垚榪欓」宸ヤ綔銆傝浣跨敤 hprof 騫惰瀹冭窡韙唴瀛樹嬌鐢紝闇瑕佷互 -Xrunhprof:heap=sites 閫夐」璋冪敤 JVM銆?

娓呭崟 3 鏄劇ず鍒嗚В浜嗗簲鐢ㄧ▼搴忓唴瀛樹嬌鐢ㄧ殑 hprof 杈撳嚭鐨勭浉鍏抽儴鍒嗐傦紙hprof 宸ュ叿鍦ㄥ簲鐢ㄧ▼搴忛鍑烘椂錛屾垨鑰呯敤 kill -3 鎴栧湪 Windows 涓寜 Ctrl+Break 鏃剁敓鎴愪嬌鐢ㄥ垎瑙c傦級娉ㄦ剰涓ゆ蹇収鐩告瘮錛?CODE>Map.Entry銆?CODE>Task 鍜?int[] 瀵硅薄鏈変簡鏄捐憲澧炲姞銆?

璇峰弬闃?娓呭崟 3銆?/P>

娓呭崟 4 灞曠ず浜?hprof 杈撳嚭鐨勫彟涓閮ㄥ垎錛岀粰鍑轟簡 Map.Entry 瀵硅薄鐨勫垎閰嶇偣鐨勮皟鐢ㄥ爢鏍堜俊鎭傝繖涓緭鍑哄憡璇夋垜浠摢浜涜皟鐢ㄩ摼鐢熸垚浜?Map.Entry 瀵硅薄錛屽茍甯︽湁涓浜涚▼搴忓垎鏋愶紝鎵懼嚭鍐呭瓨娉勬紡鏉ユ簮涓鑸潵璇存槸鐩稿綋瀹規槗鐨勩?


娓呭崟 4. HPROF 杈撳嚭錛屾樉紺?Map.Entry 瀵硅薄鐨勫垎閰嶇偣


TRACE 300446:
	java.util.HashMap$Entry.<init>(<Unknown Source>:Unknown line)
	java.util.HashMap.addEntry(<Unknown Source>:Unknown line)
	java.util.HashMap.put(<Unknown Source>:Unknown line)
	java.util.Collections$SynchronizedMap.put(<Unknown Source>:Unknown line)
	com.quiotix.dummy.MapLeaker.newTask(MapLeaker.java:48)
	com.quiotix.dummy.MapLeaker.main(MapLeaker.java:64)




鍙﹀
jstring jstr = (jstring)env->CallObjectMethod(authenRequest, mid_authenReq_getSdId_S);
 env->GetStringUTFRegion(jstr,0,env->GetStringLength(jstr),authenReq.sd_id);
褰搄str鏄痭ull鏃訛紝env->GetStringLength(jstr)浼氬嚭閿欙紝瀵艱嚧jvm宕╂簝


]]>
杞細HP-UX涓嬩嬌鐢↗NI璁塊棶鏍囧噯C++紼嬪簭http://www.tkk7.com/neumqp/archive/2006/02/27/32669.html灝忛搧鍖?/dc:creator>灝忛搧鍖?/author>Mon, 27 Feb 2006 07:54:00 GMThttp://www.tkk7.com/neumqp/archive/2006/02/27/32669.htmlhttp://www.tkk7.com/neumqp/comments/32669.htmlhttp://www.tkk7.com/neumqp/archive/2006/02/27/32669.html#Feedback0http://www.tkk7.com/neumqp/comments/commentRss/32669.htmlhttp://www.tkk7.com/neumqp/services/trackbacks/32669.html HP-UX涓嬩嬌鐢↗NI璁塊棶鏍囧噯C++紼嬪簭

闂鐨勫叧閿湪浜庣敤aCC緙栬瘧鏃剁殑鍙傛暟
鏍規嵁HP緗戠珯涓婄殑涓ょ瘒鏂囩珷鍙互寰堝鏄撶殑浣跨敤JNI璁塊棶浼犵粺C++(Classical C++)紼嬪簭
http://www.hp.com/products1/unix/java/infolibrary/prog_guide/JNI_java2.html 
http://forums1.itrc.hp.com/service/forums/questionanswer.do?admit=716493758+1092296929165+28353475&threadId=245738 
浣嗘槸,濡傛灉浠g爜涓嬌鐢ㄥ埌浜嗘爣鍑?/SPAN>C++,涔熷氨鏄敤鍒頒簡STL,灝變細鍑虹幇鑾悕鍏跺鐨?/SPAN>JVM crash. 鑰屼笖涓鑸殑鐜拌薄鏄嬌鐢?/SPAN>string鐨勬椂鍊欏嚭閿?/SPAN>

鏈鍚庡彂鐜版槸JVM鐨勫綰跨▼鏈哄埗鍜?/SPAN>aCC緙栬瘧鐨勭己鐪佺殑澶氱嚎紼嬫満鍒朵笉涓鏍?/SPAN>.鎵浠ョ紪璇戞椂闇瑕佸姞鍙傛暟鎸囧畾
鎬葷殑璇存潵,緙栬瘧鍙傛暟涓?/SPAN>
OPTS=-AA +z +u4 -D_RWSTD_MULTI_THREAD -D_REENTRANT -D_HPUX -D_HPUX_SOURCE -D_POSIX_C_SOURCE=199506L -D_XOPEN_SOURCE_EXTENDED 

鍏朵腑,-D_RWSTD_MULTI_THREAD -D_REENTRANT 鏄寚瀹氬綰跨▼鏈哄埗;鍚屾椂蹇呴』娣誨姞-D_HPUX_SOURCE 鍙傛暟,鍚﹀垯,緙栬瘧鏃朵細鍑虹幇濂囨殑閿欒
榪炴帴鍙傛暟涓?/SPAN>
-AA -b -lCsup_v2 -lstd_v2 
鍊煎緱娉ㄦ剰鐨勬槸鏍規嵁涓婇潰鎵璇寸殑絎簩綃囨枃绔犲彲鐭ヤ嬌鐢?/SPAN>-AA緙栬瘧榪炴帴鏃?/SPAN>,瑕佽繛鐨勫簱鏄?/SPAN>libCsup_v2.sl鍜?/SPAN>libstd_v2.sl(榪欎袱涓簱鏄敮鎸佹爣鍑?/SPAN>C++鐨勫簱),鑰屼笉鏄涓綃囨枃绔犱腑鎻愬埌鐨?/SPAN>libCsup.sl鍜?/SPAN>libstd.sl(榪欎袱涓簱鏄敮鎸佷紶緇?/SPAN>C++鐨勫簱). 

鍙﹀,鏈夊嚑涓鍒扮殑闂
1. 
濡傛灉緙栬瘧鍙傛暟娌℃湁鎸囧畾澶氱嚎紼嬫満鍒?/SPAN>,紱佺敤JIT(鍚姩JVM鍔犲弬鏁?/SPAN>:-Djava.compiler=none -Xint )鍙互浣跨畝鍗曠殑渚嬪瓙閫氳繃,浣嗘槸鏈変簺鎯呭喌涓嬭繕鏄細鍑洪敊

2. 
褰?/SPAN>null浣滀負String浼犲叆JNI native鎺ュ彛浠g爜涓槸,浣跨敤env->GetStringUTFChars(jstring)浼氬嚭鐜板涓嬮敊璇鑷磋櫄鎷熸満宕╂簝
Function=verify_instance_jfieldID__18jfieldIDWorkaroundSFP12klassOopDescP9_jfieldID 

3. 
鍦ㄤ嬌鐢?/SPAN>String浣滀負JNI鐨勪紶鍏ヤ紶鍑哄弬鏁?/SPAN>,浣跨敤GetStringUTFChars瑙e喅涓嶄簡涓枃闂,榪樻槸浼氭湁涔辯爜姝g‘鐨勮В鍐蟲柟娉曟槸浣跨敤浠ヤ笅涓や釜鍑芥暟
void JNU_ThrowByName(JNIEnv *env, const char *name, const char *msg) 

    jclass cls = env->FindClass(name); 
    /* if cls is NULL, an exception has already been thrown */ 
    if (cls != NULL) { 
        env->ThrowNew(cls, msg); 
    } 
    /* free the local ref */ 
    env->DeleteLocalRef(cls); 


jstring JNU_NewStringNative(JNIEnv *env, const char *str) 

  if (str==NULL) 
  { 
   return NULL; 
  } 
  jclass jcls_str = env->FindClass("java/lang/String"); 
  jmethodID jmethod_str = env->GetMethodID(jcls_str, "", "([B)V"); 

  jstring result; 
  jbyteArray bytes = 0; 
  int len; 

  if (env->EnsureLocalCapacity(2) < 0) { 
    return NULL; /* out of memory error */ 
  } 
  len = strlen(str); 
  bytes = env->NewByteArray(len); 
  if (bytes != NULL) { 
    env->SetByteArrayRegion(bytes, 0, len,(jbyte *)str); 
    result = (jstring)env->NewObject(jcls_str, jmethod_str, bytes); 
    env->DeleteLocalRef(bytes); 
    return result; 
  } /* else fall through */ 
  return NULL; 



char *JNU_GetStringNativeChars(JNIEnv *env, jstring jstr) 

    jbyteArray bytes = 0; 
    jthrowable exc; 
    char *result = 0; 
    if (env->EnsureLocalCapacity(2) < 0) { 
        return 0; /* out of memory error */ 
    } 
jclass jcls_str = env->FindClass("java/lang/String"); 
jmethodID MID_String_getBytes = env->GetMethodID(jcls_str, "getBytes", "()[B"]; 

    bytes = (jbyteArray)env->CallObjectMethod(jstr, MID_String_getBytes); 
    exc = env->ExceptionOccurred(); 
    if (!exc) { 
        jint len = env->GetArrayLength( bytes); 
        result = (char *)malloc(len + 1); 
        if (result == 0) { 
            JNU_ThrowByName(env, "java/lang/OutOfMemoryError", 
                            0); 
            env->DeleteLocalRef(bytes); 
            return 0; 
        } 
        env->GetByteArrayRegion(bytes, 0, len, (jbyte *)result); 
        result[len] = 0; /* NULL-terminate */ 
    } else { 
        env->DeleteLocalRef(exc); 
    } 
    env->DeleteLocalRef(bytes); 
    return (char*)result; 


鈽呮敞鎰忥細浣跨敤char *JNU_GetStringNativeChars()鑾峰緱鐨勬寚閽堢敤瀹屽悗瑕佹樉寮忕殑free().



]]>
杞細濡備綍浣跨敤Axis浼犻侀檮浠?http://www.tkk7.com/neumqp/archive/2006/02/20/31665.html灝忛搧鍖?/dc:creator>灝忛搧鍖?/author>Mon, 20 Feb 2006 08:28:00 GMThttp://www.tkk7.com/neumqp/archive/2006/02/20/31665.htmlhttp://www.tkk7.com/neumqp/comments/31665.htmlhttp://www.tkk7.com/neumqp/archive/2006/02/20/31665.html#Feedback0http://www.tkk7.com/neumqp/comments/commentRss/31665.htmlhttp://www.tkk7.com/neumqp/services/trackbacks/31665.html浣跨敤Axis浼犻侀檮浠舵湁涓ょ鏂瑰紡錛?/P>

1. 灝嗕綘瑕佷紶閫佺殑鏂囦歡灝佽鍦―ataHandler涓紝鐒跺悗灝咲ataHandler瀵硅薄鎴朌ataHandler鏁扮粍錛堝涓枃浠朵紶閫佺殑鏃跺欙級浣滀負瀹㈡埛绔皟鐢ㄥ嚱鏁扮殑鍙傛暟錛堜粠瀹㈡埛绔笂浼犳枃浠跺埌鏈嶅姟鍣級Axis鏈嶅姟鐨勮繑鍥炵被鍨嬶紙浠庢湇鍔″櫒绔笅杞芥枃浠跺埌瀹㈡埛绔級榪涜浼犺緭銆?/P>

2. 榪樻湁涓縐嶆柟寮忔槸鐩存帴淇敼soap淇″皝鐨勫唴瀹癸紝灝嗛檮浠朵俊鎭姞鍒皊oap淇″皝涓彂閫併?/P>

榪欓噷鎴戜滑鍙璁虹涓縐嶆柟娉曪紝鍥犱負瀹冨疄鐜拌搗鏉ラ潪甯哥畝鍗曘傚叧浜庣浜岀鏂規硶鍦ˋxis鍖呯殑webapps/attachments/TestRf.java涓湁璇︾粏鐨勫師鐮佸彲浠ュ弬鑰冦?/P>

涓嬮潰鐨勪緥瀛愭槸鎶婃枃浠朵粠鏈嶅姟鍣ㄧ涓嬭澆鍒板鎴風錛?/P>

1.鏈嶅姟绔▼搴忥細

鍋囪浼犺緭澶氫釜鏂囦歡錛氬湪鏈嶅姟鍣ㄧ灝嗘枃浠跺彇鍑烘潵錛屽茍灝嗘枃浠跺皝瑁呭湪DataHandler鏁扮粍涓?BR>浠g爜濡備笅錛?/P>

 DataHandler[] ret = new DataHandler[totalFileNum];
 ... ...
 java.io.File myFile = new java.io.File(filePath);
 if(myFile.isFile() && myFile.canRead())
 {
  String fname = myFile.getAbsoluteFile().getCanonicalPath();
  DataHandler[0] = new DataHandler(new FileDataSource(fname));
 }
 ... ...

 return ret;

涓婇潰鐨勪唬鐮佸皢鎵鏈夌殑鏂囦歡灝佽鍦ㄤ簡DataHandler鏁扮粍涓紝騫惰繑鍥炪?/P>

2. 瀹㈡埛绔殑璁塊棶錛?/P>

浠g爜濡備笅錛?BR> Service service = new Service();
 Call call = (Call) service.createCall();

 URL myURL = new URL(" call.setTargetEndpointAddress(myURL); //璁懼畾鏈嶅姟鐨勪富鏈哄拰浣嶇疆
 call.setOperationName(new QName("urn:MyAttachServer","echoDir")); //璁劇疆瑕佽皟鐢ㄧ殑鏈嶅姟鐨勬柟娉?BR> QName qnameAttachment = new QName("urn:MyAttachServer","DataHandler");

 call.registerTypeMapping(DataHandler.class, qnameAttachment, JAFDataHandlerSerializerFactory.class,JAFDataHandlerDeserializerFactory.class); //涓洪檮浠訛紙鍗矰ataHandler綾伙級鍒涘緩搴忓垪鍖栫敓鎴愬櫒

 call.addParameter("source", XMLType.XSD_STRING ,ParameterMode.IN); //璁劇疆鏈嶅姟璋冪敤鏂規硶鐨勪紶鍏ュ弬鏁扮被鍨?BR> call.setReturnType(XMLType.SOAP_ARRAY); //璁劇疆璋冪敤鏈嶅姟鏂規硶鐨勮繑鍥炵被鍨嬶紝鐢變簬榪斿洖鐨勬槸DataHandler鏁扮粍錛屾墍浠ヨ緗負SOAP_ARRAY綾誨瀷
 javax.activation.DataHandler[] ret = (javax.activation.DataHandler[])call.invoke(new Object[]{null}); //璋冪敤鏂規硶

 for (i = 0; i < ret.length; ++i)
        {
            DataHandler recDH = ret[i];
            java.io.File receivedFile = new java.io.File(recDH.getName()); //鏂囦歡鐢熸垚
        }

3. 鏈嶅姟鐨勯儴緗詫細

娉ㄦ剰錛氫綘瑕佸湪閮ㄧ講鐨勬椂鍊欙紝瀹氫箟DataHandler鐨勫簭鍒楀寲鐢熸垚鍣ㄣ?/P>

  <service name="urn:att_STC_Server" provider="java:RPC" >
    <parameter name="className" value="samples.att_STC.att_STC_Server"/>
    <parameter name="allowedMethods" value="echoDir"/>

 <typeMapping deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"
   languageSpecificType="java:javax.activation.DataHandler" qname="ns1:DataHandler"
    serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"
    encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"/>
  </service>

</deployment>

榪愯java org.apache.axis.client.AdminClient %* deploy.wsdd錛岄儴緗叉湇鍔°?/P>

]]>
杞細浣跨敤Java瀹炵幇CAhttp://www.tkk7.com/neumqp/archive/2006/02/20/31605.html灝忛搧鍖?/dc:creator>灝忛搧鍖?/author>Mon, 20 Feb 2006 03:07:00 GMThttp://www.tkk7.com/neumqp/archive/2006/02/20/31605.htmlhttp://www.tkk7.com/neumqp/comments/31605.htmlhttp://www.tkk7.com/neumqp/archive/2006/02/20/31605.html#Feedback0http://www.tkk7.com/neumqp/comments/commentRss/31605.htmlhttp://www.tkk7.com/neumqp/services/trackbacks/31605.html2004-05-29 17:39:53

涓婚: 浣跨敤Java瀹炵幇CA(鍥?

    鍓嶉潰鍑犵瘒鏂囩珷宸茬粡鎶婂浣曠敤Java瀹炵幇涓涓狢A鍩烘湰涓婅瀹屼簡.浣嗘槸浠栦滑閮芥湁涓涓壒鐐?灝辨槸鐢ㄦ埛鐨勪俊鎭兘鏄湪鐜板満鑾峰彇鐨?涓嶈兘鍋氱敵璇峰拰絳懼彂鐩稿垎紱?浠婂ぉ鎴戜滑瑕佽榪扮殑鏄疨KCS#10璇佷功璇鋒眰鏂囦歡.瀹冪殑浣滅敤灝辨槸鍙互浣跨敵璇峰拰絳懼彂鐩稿垎紱?

    PKCS#10璇佷功璇鋒眰緇撴瀯涓殑涓昏淇℃伅鍖呭惈浜嗚絳懼彂鑰?璇佷功鐢寵鑰?鐨勪富浣撳悕縐?DN)鍜屼粬鐨勫叕閽?鍥犳涓涓狢A鍦ㄨ幏鍙栧埌涓涓狿KCS#10璇佷功璇鋒眰鍚?灝卞彲浠ヤ粠涓幏鍙栧埌浠諱綍鍜岀鍙戣瘉涔︽湁鍏崇殑淇℃伅,鐒跺悗鐢ㄥ畠鑷繁鐨勭閽ョ鍙戣瘉涔?

    浣跨敤BC Provider鍦↗ava涓瀯閫犱竴涓瘉涔﹁姹傛牸寮忕殑瀵硅薄璋冪敤鍏舵瀯閫犲嚱鏁板嵆鍙?榪欎釜鍑芥暟濡備笅:

    PKCS10CertificationRequest(java.lang.String signatureAlgorithm, X509Name subject, java.security.PublicKey key, ASN1Set attributes, java.security.PrivateKey signingKey)

    瀹冪殑鍙傛暟鏄嚜絳懼悕綆楁硶,璇佷功鐢寵鑰呯殑DN,璇佷功鐢寵鑰呯殑鍏挜,棰濆鐨勫睘鎬ч泦(灝辨槸瑕佺敵璇風殑璇佷功鐨勬墿灞曚俊鎭?,鐢寵璇佷功鑰呯殑縐侀挜.鐢寵璇佷功鑰呯殑縐侀挜浠呬粎鏄敤鏉ヨ繘琛屼竴涓嬭嚜絳懼悕,騫朵笉鍑虹幇鍦ㄨ瘉涔﹁姹備腑,闇瑕佽嚜絳懼悕鐨勭洰鐨勬槸淇濊瘉璇ュ叕閽ョ‘瀹炰負鐢寵鑰呮墍鏈?

    璋冪敤璇ュ璞$殑getEncoded()鏂規硶鍙互灝嗗叾榪涜DER緙栫爜,鐒跺悗鍌ㄥ瓨璧鋒潵,璇ュ璞¤繕鏈夊彟涓涓瀯閫犲嚱鏁?
    PKCS10CertificationRequest(byte[] bytes)
    榪欎釜鏋勯犲嚱鏁扮殑浣滅敤灝辨槸鐩存帴浠庡偍瀛樼殑DER緙栫爜涓妸榪欎釜瀵硅薄榪樺師鍑烘潵.

    鍒╃敤璇佷功璇鋒眰緇撴瀯榪涜璇佷功絳懼彂鐨勪唬鐮佸涓?榪欓噷鍋囪CSR鏄竴涓凡緇忚幏鍙栧嚭鏉ョ殑PKCS10CertificationRequest緇撴瀯:

    PublicKey SubjectPublicKey = CSR.getPublicKey();
    CertificationRequestInfo CSRInfo = CSR.getCertificationRequestInfo();
    X509Name SubjectDN = CSRInfo.getSubject();
    ASN1Set Attributes = CSRInfo.getAttributes();

    榪欐牱,鐢寵鑰呯殑涓諱綋DN,鐢寵鑰呯殑鍏挜,鐢寵鑰呭笇鏈涘湪璇佷功鎵╁睍淇℃伅涓~鍐欑殑灞炴ч兘寰楀埌浜?鍓╀笅鐨勪簨鎯呭氨鍜岀敤鎴峰湪鐜板満杈撳叆鏃朵竴鏍蜂簡,鍏跺畠鐨勪俊鎭竴鑸槸鐢寵鑰呬笉鑳藉喅瀹氱殑.鍙﹀璇佷功璇鋒眰鏍煎紡涓湁涓鏍蜂俊鎭病鏈夋槑紜粰鍑烘潵,閭e氨鏄瘉涔︾殑鏈夋晥鏈?榪欎釜搴旇鍗曠嫭璇㈤棶鐢ㄦ埛,鎴栬呯敤鍏跺畠鐨勬柟娉曚繚瀛樿搗鏉?



[榪斿洖欏墮儴]


2004-05-28 16:46:12

涓婚: 浣跨敤Java瀹炵幇CA(涓?

    鍓嶅嚑嬈℃垜宸茬粡鍩烘湰涓婃妸濡備綍鍋欳A鎵闇瑕佺殑鍩虹鐭ヨ瘑璁插緱宸笉澶氫簡,浠婂ぉ鐩存帴璁插浣曠敤Java紼嬪簭鏉ュ疄鐜頒竴涓狢A搴旇灝變笉鏄粈涔堝お鍥伴毦鐨勪簨鎯呬簡.

    瑕佸仛CA,絎竴姝ヨ鍑嗗濂借嚜宸辯殑璇佷功鍜岀閽?縐侀挜濡備綍浠庢枃浠墮噷闈㈣鍙栧嚭鏉ュ墠闈㈠凡緇忚榪囦簡.浠庢枃浠剁郴緇熶腑璇誨嚭璇佷功鐨勪唬鐮佸涓?

    CertificateFactory certCF = CertificateFactory.getInstance("X.509");
    X509Certificate caCert = certCF.generateCertificate(certBIS);

    榪欓噷cerBIS鏄竴涓狪nputStream綾誨瀷鐨勫璞?渚嬪涓涓爣鍑嗙殑X509v3鏍煎紡鐨勮瘉涔︽枃浠舵墍褰㈡垚鐨勮緭鍏ユ祦.

    絎簩姝ュ氨鏄粠鐢ㄦ埛閭i噷鑾峰彇杈撳叆,鐒跺悗鏋勯犱富浣撳悕縐扮粨鏋凞N,濡備綍鏋勯燚N涓婃宸茬粡璇磋繃浜?濡備綍浠庣敤鎴烽偅閲岃幏鍙栬緭鍏?榪欎釜涓嶅湪鏈枃璁ㄨ鑼冨洿涔嬪唴.

    涓嬩竴姝ュ氨鏄幏鍙栫敤鎴風殑鍏挜,濂藉拰浠栨墍闇瑕佺殑璇佷功瀵瑰簲璧鋒潵.涔熸湁涓嶅皯CA鐨勫仛娉曞氨鏄湪榪欓噷鏇跨敤鎴風幇鍦虹敓鎴愪竴瀵瑰瘑閽ュ,鐒跺悗鎶婂叕閽ユ斁鍒拌瘉涔︿腑絳懼彂緇欑敤鎴?榪欎釜搴旇鐪嬪疄闄呴渶瑕侀夋嫨鍚堥傜殑鏂瑰紡.

    鐜板湪涓鍒囦俊鎭兘宸茬粡鍑嗗濂戒簡,鍙互絳懼彂璇佷功浜?涓嬮潰鐨勪唬鐮佽鏄庝簡榪欎釜榪囩▼:

    //鏋勯犱竴涓瘉涔︾敓鎴愬櫒瀵硅薄

    X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();

    // 濡傛灉浠ヤ笂涓鍒囬兘姝e父鍦拌瘽,灝卞彲浠ョ敓鎴愯瘉涔︿簡
    X509Certificate cert = null;
    cert = certGen.generateX509Certificate(caPrivateKey);

    榪欓噷鏄笂闈㈢敤鍒扮殑鐢熸垚絳懼彂鑰呭叕閽ユ爣璇嗙殑鍑芥暟: 

    protected AuthorityKeyIdentifier createAuthorityKeyId(PublicKey pubKey)
    {
    AuthorityKeyIdentifier authKeyId = null;

    try
    {
    ByteArrayInputStream bIn = new ByteArrayInputStream(pubKey.getEncoded());
    SubjectPublicKeyInfo info = new SubjectPublicKeyInfo(
        (DERConstructedSequence)new DERInputStream(bIn).readObject());
    authKeyId = new AuthorityKeyIdentifier(info);
    }
    catch (IOException e)
    {
    System.err.println("Error generating SubjectKeyIdentifier:  " +
        e.toString());
    System.exit(1);
    }

    return authKeyId;
    }

    鐢熸垚涓諱綋鍏挜鏍囪瘑鐨勫嚱鏁板拰涓婇潰鐨勭被浼?鎶夾uthorityKeyIdentifier鏇挎崲鎴怱ubjectKeyIdentifier灝卞彲浠ヤ簡.

    榪欓噷瑕佹敞鎰忕殑鏄?CA鐨勫叕閽ヤ篃鏄湪涓浠借瘉涔﹂噷,榪欑璇佷功鐨勭壒鐐規槸絳懼彂鑰匘N鍜屾帴鏀惰匘N涓鏍?涔熷氨鏄,榪欑璇佷功鏄疌A鑷繁緇欒嚜宸遍鍙戠殑璇佷功,涔熷氨鏄?鑷鍚嶈瘉涔?,瀹冧笂闈㈢殑鍏挜鏄疌A鑷韓鐨勫叕閽?鐢ㄦ潵絳懼悕鐨勭閽ュ氨鏄鍏挜瀵瑰簲鐨勭閽?涓鑸瘡涓狢A閮借鏈夎繖涔堜竴浠借瘉涔?闄ら潪璇A涓嶆槸鏍笴A,鍗沖畠鐨勬潈濞佹т笉鏄敱瀹冭嚜宸辮瘉鏄?鑰屾槸鐢卞畠鐨勪笂綰A璇佹槑.浣嗘槸,鏈鍚庢誨綊瑕佹湁涓涓牴CA,瀹冧負鍚勪釜瀹夊叏搴旂敤紼嬪簭鐨勭敤鎴鋒墍淇¤禆.

    鍒拌繖閲屾垜浠凡緇忔妸CA鏈鍩烘湰鐨勫姛鑳藉浣曠敤Java瀹炵幇璁插畬浜?涓嬩竴嬈¤濡備綍浠嶱KCS#10鏍煎紡璇佷功璇鋒眰鏂囦歡涓鍙栧嚭鐢ㄦ埛淇℃伅,鐒跺悗鐩存帴絳懼彂鍏挜.



[榪斿洖欏墮儴]


2004-05-27 15:34:59

涓婚: 浣跨敤Java瀹炵幇CA(浜?

    鏄ㄥぉ鏈潵蹇啓瀹屼簡,緇撴灉涓嶅皬蹇冩寜浜?tab"閿?鐒跺悗鍚戞寜閫鏍奸敭,緇撴灉閫鍒板墠涓涓〉闈簡,鐒跺悗鍏ㄩ儴閮界櫧鍐欎簡,涓嶇埥.鍙ソ浠婂ぉ閲嶆柊鍐欎簡.

    涓婃鎴戜滑璁插埌濡備綍鐢熸垚瀵嗛挜瀵?浠ュ強濡備綍灝嗚濡傚叕閽?縐侀挜,璇佷功絳夎繖涓綾誨畨鍏ㄥ璞″湪鏂囦歡緋葷粺鍜屽唴瀛樹箣闂存潵鍥炶漿鎹?榪欎簺鏄噯澶囧紑CA鐨勫熀鏈姛,浠婂ぉ鎴戜滑璁蹭竴涓婥A鐨勫熀鏈師鐞嗕互鍙婂浣曚嬌鐢ㄤ富浣撳悕縐扮粨鏋凞N(Distinguish Name)鏉ヨ〃紺烘瘡涓涓瘉涔︿腑鐨勪富浣?

    涓浠借瘉涔﹀氨鏄竴涓潈濞佹満鏋勫涓涓富浣撶殑韜喚鐨勭‘璁ょ殑璇佹槑.鍗充竴浠借瘉涔﹁〃紺轟竴涓潈濞佹満鏋勭‘璁や簡涓涓富浣撳氨鏄畠鑷繁,鑰屼笉鏄叾瀹冪殑鍐掑悕欏舵浛鑰?涓諱綋鍙互鏄竴涓釜浜?涔熷彲浠ヤ笉鏄?渚嬪,鍦ㄩ渶瑕佸畨鍏ㄦ湇鍔$殑鏃跺?闇瑕佷負涓鍙扮綉绔欑殑鏈嶅姟鍣ㄩ鍙戣瘉涔?榪欑璇佷功鐨勪富浣撳氨鏄竴鍙版湇鍔″櫒.絳劇講璇佷功鐨勬潈濞佹満鏋勫氨鍙仛CA,璇ユ潈濞佹満鏋勬湰韜篃鏄竴涓富浣?鏉冨▉鏈烘瀯閫氳繃瀵瑰寘鍚湁寰呰璇佺殑涓諱綋鐨勪竴緋誨垪淇℃伅鐨勫緟絳懼悕璇佷功"(TBS,to be signed)榪涜鏁板瓧絳懼悕鏉ヨ〃紺鴻鏈烘瀯瀵瑰畠鐨勮鍙?涓浠藉寘鍚簡寰呰璇佺殑涓諱綋鐨勭浉鍏充俊鎭殑TBS鍐嶅姞涓奀A浣跨敤鑷繁鐨勭閽ヨ繘琛岀鍚嶄駭鐢熺殑瀛楄妭嫻佹斁鍦ㄤ竴璧?灝辨瀯鎴愪簡涓浠芥爣鍑嗙殑X509璇佷功.

    涓涓猅BS涓寘鍚簡浠ヤ笅榪欎簺涓昏淇℃伅:

    璇佷功鐨勭増鏈?閫氬父鏄?(X509v3)

    璇佷功鐨勫簭鍒楀彿,RFC3280涓瀹?姣忎釜CA蹇呴』紜繚瀹冮鍙戠殑姣忎竴浠借瘉涔︾殑搴忓垪鍙烽兘鏄敮涓鐨?騫朵笖搴忓垪鍙峰彧鑳戒嬌鐢ㄩ潪璐熸暣鏁?

    絳懼彂鑰?CA)鐨勪富浣撳悕縐?涓涓狣N瀵硅薄.

    璇佷功鐨勬湁鏁堟湡,琛ㄧず鏂規硶鏄袱涓椂闂村?琛ㄧず浜嗚璇佷功浠庝綍鏃跺紑濮嬬敓鏁?浣曟椂寮濮嬩綔搴?

    寰呰璇佺殑涓諱綋鐨勪富浣撳悕縐?涔熸槸涓涓狣N瀵硅薄.

    寰呰璇佺殑涓諱綋鐨勫叕閽?浠諱綍瀹夊叏搴旂敤鍦ㄧ‘璁ゅ畬璇佷功鐨勬湁鏁堟у悗,灝卞彲浠ュ紑濮嬩嬌鐢ㄨ涓諱綋鐨勫叕閽ヤ笌涔嬭繘琛屽畨鍏ㄩ氫俊.

    濡傛灉鏄疿509v3璇佷功,鍗崇増鏈彿鏄?鐨勮瘽,鍚庨潰榪樻湁涓涓瘉涔︽墿灞曚俊鎭瓧孌?鍙互鍦ㄨ瘉涔﹂噷闈㈡坊鍔犱竴浜涘叾瀹冪殑淇℃伅.

    涓嬮潰鎴戜滑鏉ョ湅涓涓嬭〃紺轟富浣撶殑涓諱綋鍚嶇О緇撴瀯:DN.榪欎釜緇撳氨鏋勬槸涓涓睘鎬х殑闆嗗悎.姣忎釜灞炴ф湁灞炴у悕縐板拰灞炴у?瀹冪殑浣滅敤灝辨槸鐢ㄦ潵琛ㄧず"鎴戞槸璋?,涔熷氨鏄,榪欎釜璇佷功鍒板簳鏄皝棰佸彂緇欒皝鐨?榪欎釜璇佷功瀵瑰簲鐨勫叕閽ユ槸璋佹嫢鏈夌殑.

    閫氬父浣跨敤涓涓瓧絎︿覆鏉ヨ〃紺篋N緇撴瀯,榪欑瀛楃涓茶鏄庝簡榪欑緇撴瀯涓殑鍚勪釜灞炴х殑綾誨瀷鍜屽?

    C=CN;S=BeiJing;L=BeiJing;O=PKU;OU=ICST;CN=wolfenstein

    榪欓噷C鏄浗瀹跺拰鍦板尯浠g爜,S鍜孡閮芥槸鍦板尯浠g爜,S鐩稿綋浜庣渷鎴栬呭窞榪欐牱鐨勭駭鍒?L鐩稿綋浜庡煄甯傜駭鍒?O鏄粍緇囨満鏋勫悕縐?OU鏄綰х粍緇囨満鏋勫悕縐?CN鏄富浣撶殑閫氱敤鍚?common name).鍦ㄨ繖閲?C,S,L絳夌瓑灞炴х殑綾誨瀷閮芥槸鐩稿鍥哄畾鐨?渚嬪C涓鑸氨鏄敤鏉ヨ〃紺哄浗瀹跺拰鍦板尯浠g爜,鍦―N緇撴瀯涓繕鍙互娣誨姞涓浜涘叾瀹冪被鍨嬬殑淇℃伅,涓鑸篃閮芥槸浠?xxx=xxx"榪欐牱鏉ヨ〃紺虹殑.

    涓嬮潰鎴戜滑鏉ヨ鏄庡浣曞湪Java璇█涓瀯閫犲嚭涓涓富浣撳悕縐板璞?

    BC Provider涓嬌鐢╔509Name瀵硅薄鏉ヨ〃紺篋N,鏋勯犱竴涓猉509Name鐨勬楠ゅぇ浣撳涓?

    鍏堟瀯閫犱袱涓獀ector瀵硅薄,鐢ㄦ潵琛ㄧず灞炴у悕縐板拰灞炴у?

    Vector oids = new Vector();
    Vector attributes = new Vector();

    鐒跺悗鍦╫ids榪欎釜鐢ㄦ潵琛ㄧず灞炴у悕縐扮殑vector瀵硅薄涓皢灞炴у悕縐頒竴涓竴涓坊鍔犺繘鍘?

    oids.addElement(X509Name.C);

    ......

    oids.addElement(X509Name.CN);

    X509Name瀵硅薄閲岄潰鏈夎嫢騫插父閲?渚嬪涓婇潰鐨刋509Name.C.榪樻湁X509Name.ST絳夌瓑,閮藉彲浠ュ拰涓婇潰涓劇殑渚嬪瓙瀵瑰簲璧鋒潵.

    鐒跺悗灝嗗睘鎬у兼坊鍔犲埌attributes瀵硅薄涓?

    attributes.addElement("CN");

    ......

    attributes.addElement("Wolfenstein");

    鏈鍚庡氨鍙互鏋勯犲嚭涓涓猉509Name瀵硅薄:

    X509Name SubjectDN = new X509Name(oids, attributes);

    榪欐牱,鎴戜滑鐨勪富浣撳悕縐扮粨鏋勫氨紜珛璧鋒潵浜?

    涓嬫鎴戜滑灝卞彲浠ヨ鍏抽敭鐨勯儴鍒嗕簡,閭e氨鏄浣曠敤Java紼嬪簭瀹屾垚CA鏈閲嶈鐨勫姛鑳?絳劇講璇佷功.



[榪斿洖欏墮儴]


2004-05-25 21:23:52

涓婚: 浣跨敤Java瀹炵幇CA(涓)

    閫氳繃鎴戞槰澶╃殑鏂囩珷澶у搴旇宸茬粡娓呮浜?鐢↗ava鍐欎俊鎭畨鍏ㄦ柟闈㈢殑紼嬪簭闇瑕佸仛鐨勫噯澶囧伐浣?濂戒簡,鐜板湪鍋囪浣犲凡緇忔槸涓涓Java璇█鏈韓姣旇緝鐔熸倝,鑳藉鐢↗ava鍐欎竴浜涚▼搴忕殑浜?騫朵笖榪欎簺璇ヤ笅杞界殑jar鍖呭凡緇忎笅杞藉ソ浜?鍙互姝e紡寮宸ヤ簡.

    鍦ㄦ墍鏈夌殑姝ょ被紼嬪簭鐨勫紑澶?鏃犺鏄湪綾葷殑鏋勯犲嚱鏁頒腑涔熷ソ,鍦ㄥ垵濮嬪寲鍑芥暟涓篃濂?,閮借鍏堟潵涓婅繖涔堜竴鍙?Security.addProvider(new BouncyCastleProvider());灝咮ouncyCaslte鐨凱rovider娣誨姞鍒扮郴緇熶腑,榪欐牱浠ュ悗緋葷粺鍦ㄨ繍琛岀浉鍏崇▼搴忕殑鏃跺欒皟鐢ㄧ殑灝辨槸榪欎釜Provider涓殑鍔犲瘑綆楁硶.

    鐒跺悗鎴戜滑灝卞彲浠ュ紑濮嬪紑CA浜?棣栧厛,浣滀負涓涓狢A瑕佹湁鑷繁鐨勪竴瀵瑰叕閽ュ拰縐侀挜,鎴戜滑鍏堣鐢熸垚榪欎箞涓瀵?浣跨敤KeyPairGenerator瀵硅薄灝卞彲浠ヤ簡,璋冪敤KeyPairGenerator.getInstance鏂規硶鍙互鏍規嵁瑕佺敓鎴愮殑瀵嗛挜綾誨瀷鏉ヤ駭鐢熶竴涓悎閫傜殑瀹炰緥,渚嬪甯哥敤鐨凴SA,DSA絳?鐒跺悗璋冪敤璇ュ璞$殑initialize鏂規硶鍜実enerateKeyPair鏂規硶灝卞彲浠ヤ駭鐢熶竴涓狵eyPair瀵硅薄浜?鐒跺悗璋冪敤KeyPair瀵硅薄涓殑鐩稿簲鏂規硶灝卞彲浠ヨ幏鍙栫敓鎴愮殑瀵嗛挜瀵逛腑鐨勫叕閽ュ拰縐侀挜浜?

    鏈変簡鍏挜鍜岀閽ュ浠ュ悗,涓嬮潰鐨勪竴涓緢鐜板疄闂灝辨槸濡備綍鎶婂畠浠偍瀛樿搗鏉?閫氬父鎴戜滑瑕佸榪欎簺瀹夊叏瀵硅薄,濡傚叕閽?縐侀挜,璇佷功絳夊厛榪涜緙栫爜.緙栫爜鐨勭洰鐨勬槸涓轟簡鎶婄粨鏋勫鏉傜殑瀹夊叏瀵硅薄鍙樻垚瀛楄妭嫻佷互渚垮瓨鍌ㄥ拰璇誨彇,濡侱ER緙栫爜.鍙﹀,閫氬父榪樻妸DER緙栫爜鍚庣殑瀛楄妭嫻佸啀嬈¤繘琛宐ase64緙栫爜,浠ヤ究浣垮瓧鑺傛祦涓墍鏈夌殑瀛楄妭閮藉彉鎴愬彲鎵撳嵃鐨勫瓧鑺?

    鍦↗ava璇█涓?榪欎簺瀹夊叏瀵硅薄鍩烘湰涓婇兘鏈塯etEncoded()鏂規硶.渚嬪:

    byte[] keyBytes = privateKey.getEncoded();

    榪欐牱灝辨妸涓涓閽ヨ繘琛屼簡DER緙栫爜鍚庣殑緇撴灉淇濆瓨鍒頒竴涓猙yte鏁扮粍涓簡.鐒跺悗灝卞彲浠ユ妸榪欎釜byte鏁扮粍淇濆瓨鍒頒換浣曚粙璐ㄤ腑.濡傛灉鏈夊繀瑕佺殑璇?鍙互浣跨敤BC Provider涓殑Base64緙栫爜瑙g爜鍣ㄧ被榪涜緙栫爜,灝卞儚榪欐牱:

    byte data[] = Base64.encode(keyBytes);

    瑕佷粠鏂囦歡涓鍙栫閽ュ垯搴旇榪欐牱:

    PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyData);
    KeyFactory kfac = KeyFactory.getInstance("RSA");
    privateKey = kfac.generatePrivate(spec);

    榪欓噷璇存槑涓涓?瀵筊SA縐侀挜榪涜緙栫爜灝變細鑷姩鍦版寜鐓KCS8榪涜.鍥犳璇誨彇鐨勬椂鍊欏皢鍖呭惈緙栫爜鐨勫瓧鑺傛暟緇勪綔涓篜KCS8EncodedKeySpec瀵硅薄鐨勬瀯閫犲嚱鏁扮殑鍙傛暟灝卞彲浠ョ敓鎴愪竴涓綾誨瀷鐨勫璞?鐒跺悗鍒涘緩涓涓瘑閽ュ伐鍘傚璞″氨鍙互鎸夌収瑕佹眰鐢熸垚涓涓猂SA縐侀挜浜?寰堟樉鐒惰繖閲岀殑keyData搴旇鏄拰涓婇潰鐨刱eyBytes鍐呭鐩稿悓.

    涓轟簡鎻愰珮緋葷粺鐨勫畨鍏ㄦ?閫氬父縐侀挜鍦ㄧ粡榪嘍ER緙栫爜鍚?榪樹細浣跨敤涓涓彛浠よ繘琛屽姞瀵?鐒跺悗鍐嶅偍瀛樺湪鏂囦歡緋葷粺涓?鍦ㄤ嬌鐢ㄧ閽ョ殑鏃跺?濡傛灉娌℃湁姝g‘鐨勫彛浠?鏄棤娉曟妸縐侀挜榪樺師鍑烘潵鐨?

    淇濆瓨璇佷功鍜屼繚瀛樼閽ョ被浼?Certificate瀵硅薄涓篃鏈変竴涓猤etEncoded鐨勬柟娉?

    榪欐灝辮榪欎簺.澶у搴旇鍙互鎶婅繖浜涘畨鍏ㄥ璞″緢鐔熺粌鍦頒粠鏂囦歡緋葷粺鍜屽唴瀛樹箣闂存潵鍥炲湴鎶樿吘浜嗗惂.榪欏浠ュ悗瀹炵幇CA鏄緢閲嶈鐨?涓嬫鎴戜細璁蹭竴涓嬭瘉涔︿腑琛ㄧず涓諱綋鐨勬柟娉?DN.



[榪斿洖欏墮儴]


2004-05-24 17:23:06

涓婚: 浣跨敤Java寮鍙戝拰淇℃伅瀹夊叏鐩稿叧鐨勭▼搴?/A>

    榪欓噷璇寸殑淇℃伅瀹夊叏鏄浉瀵逛簬緋葷粺瀹夊叏鑰岃█鐨?瀹冩洿渚ч噸浜庡姞瀵?瑙e瘑,鏁板瓧絳懼悕,楠岃瘉,璇佷功絳夌瓑.鑰岀郴緇熷畨鍏ㄤ富瑕佷晶閲嶄簬緋葷粺鏈韓鏄惁鏈夊畨鍏ㄦ紡媧?濡傚父瑙佺殑鐢變簬杞歡璁捐鐨勪笉瀹屽杽鑰屽鑷寸殑婊″ぉ椋炵殑緙撳啿鍖烘孩鍑虹瓑絳?

    Java璇█涓礋璐e姞瀵嗗姛鑳界殑閮ㄤ歡鏄疛CE(Java Crypto Extenstion),瀹冧嬌鐢ㄥ紑鏀懼紡鐨勬濇兂,鍙互鍏佽鐢ㄦ埛鑷繁緙栧啓鍔犲瘑綆楁硶鐨勫叿浣撳疄鐜扮殑妯″潡絳?榪欎簺涓滆タ琚О涓篔CE Provider,JCE鐨勬彁渚涜?SUN鍏徃鏈韓鎻愪緵浜嗕竴浜汸rovider.涓嶈繃鎴戞帹鑽愪嬌鐢˙ouncy Castle鐨凱rovider.鍘熷洜鏄畠瀹炵幇鐨勫姞瀵嗙畻娉曞,榪炴瘮杈冩柊鐨勬き鍦嗘洸綰?ECC)綆楁硶閮芥湁浜?鍘?A >http://www.bouncycastle.org/鍙互鎵懼埌浣犳墍甯屾湜鐨?Bouncy Castle闄や簡鎻愪緵Provider鏈韓浠ュ,榪樺寘鎷簡涓涓猄/MIME鍜屼竴涓猳pen pgp 鐨刯ar鍖呭彧鏈塒rovider鏈韓鏄繀瑕佺殑,鍚庝袱涓寘鏄柟渚夸綘緙栫▼鑰屾彁渚涚殑.渚嬪鏈変簡S/MIME鍖呭悗,浣犲氨涓嶅啀闇瑕佷負璇稿"鍔犲瘑涓涓瓧絎︿覆鎴栬呬竴鐗囨枃绔犵劧鍚庣鍚?涔嬬被鐨勫緢鐜板疄鐨勫簲鐢ㄧ▼搴忓啓涓婁竴澶у爢浠g爜浜?鍙寮曠敤S/MIME鍖呬腑鐨勬煇鍑犱釜綾?寰堝揩灝卞彲浠ユ悶瀹?鑰宱pen pgp鐨勫瓨鍦?浣夸綘鍦ㄧ敤Java緙栧啓鍜孭GP/GPG浜や簰鐨勭▼搴忔椂鏂逛究澶氫簡.

    榪欐鍏堝啓榪欎箞澶氫簡,涓嬫寮濮嬪叿浣撹鎶婅繖浜涗笢瑗挎悶涓嬫潵鍚庢庝箞寮濮嬪共媧誨惂.鎴戜互鎴戠幇鍦ㄦ墜澶翠笂姝e湪鍋氱殑浜嬫儏鍛婅瘔澶у,濡備綍鍋氫竴涓狢A.

    鏈変簡BC Provider,寮CA,鐪熺殑灝辨槸榪欎箞綆鍗?



]]>

    // 浠嶤A鐨勮瘉涔︿腑鑾峰彇絳懼彂鑰呯殑涓諱綋鍚嶇О(DN)
    // 榪欓噷鏈変竴鐐瑰皬鎶宸?鎴戜滑瑕佹妸JCE涓畾涔夌殑
    // 鐢ㄦ潵琛ㄧずDN鐨勫璞?FONT face=鏂板畫浣?size=2>X500Principal
杞寲鎴愬湪
    // BC Provider涓殑鐩稿簲鐨勫璞?FONT face=鏂板畫浣?size=2>X509Name

    // 鍏堜粠CA鐨勮瘉涔︿腑璇誨彇鍑篊A鐨凞N榪涜DER緙栫爜
    DERInputStream dnStream =
                 new DERInputStream(
      new ByteArrayInputStream(
       caCert.getSubjectX500Principal().
        getEncoded()));
    // 椹笂鍙堜粠緙栫爜鍚庣殑瀛楄妭嫻佷腑璇誨彇DER緙栫爜瀵硅薄
    DERConstructedSequence  dnSequence =
     (DERConstructedSequence)dnStream.readObject();
    // 鍒╃敤璇誨彇鍑烘潵鐨凞ER緙栫爜瀵硅薄鍒涘緩X509Name
    // 瀵硅薄,騫惰緗負璇佷功鐢熸垚鍣ㄤ腑鐨?絳懼彂鑰匘N"
    certGen.setIssuerDN(new X509Name(dnSequence));
    // 璁劇疆濂借瘉涔︾敓鎴愬櫒涓殑"鎺ユ敹鏂笵N"
    certGen.setSubjectDN(subjectDN);
    // 璁劇疆濂戒竴浜涙墿灞曞瓧孌?鍖呮嫭絳懼彂鑰呭拰
    // 鎺ユ敹鑰呯殑鍏挜鏍囪瘑
    certGen.addExtension(X509Extensions.SubjectKeyIdentifier, false,
    createSubjectKeyId(keyToCertify));
    certGen.addExtension(X509Extensions.AuthorityKeyIdentifier, false,
    createAuthorityKeyId(caCert.getPublicKey()));
    // 璁劇疆璇佷功鐨勬湁鏁堟湡鍜屽簭鍒楀彿
    certGen.setNotBefore(startDate);
    certGen.setNotAfter(endDate);
    certGen.setSerialNumber(serialNumber);
    // 璁劇疆絳懼悕綆楁硶,鏈緥涓嬌鐢∕D5hash鍚嶳SA
    // 絳懼悕,騫朵笖璁劇疆濂戒富浣撶殑鍏挜
    certGen.setSignatureAlgorithm("MD5withRSA");
    certGen.setPublicKey(keyToCertify);

鍦╫racle as鏁版嵁婧愪腑閰峫oad balancehttp://www.tkk7.com/neumqp/archive/2005/12/14/23773.html灝忛搧鍖?/dc:creator>灝忛搧鍖?/author>Wed, 14 Dec 2005 02:12:00 GMThttp://www.tkk7.com/neumqp/archive/2005/12/14/23773.htmlhttp://www.tkk7.com/neumqp/comments/23773.htmlhttp://www.tkk7.com/neumqp/archive/2005/12/14/23773.html#Feedback0http://www.tkk7.com/neumqp/comments/commentRss/23773.htmlhttp://www.tkk7.com/neumqp/services/trackbacks/23773.html鍏朵粬鐓у父

]]>
主站蜘蛛池模板: 亚洲av一本岛在线播放| 亚洲国产二区三区久久| 亚洲综合国产成人丁香五月激情 | 免费在线人人电影网| 成年女人免费碰碰视频| 在线综合亚洲中文精品| 国产va免费精品观看精品| 国产日本亚洲一区二区三区| 国产麻豆视频免费观看| 精品亚洲成在人线AV无码| 999在线视频精品免费播放观看| 亚洲天堂电影在线观看| 免费人成在线视频| 亚洲av无码成人精品国产| 免费一看一级毛片全播放| 亚洲成av人片在www鸭子| 免费A级毛片无码A| 国产精品1024在线永久免费 | 亚洲日本香蕉视频观看视频| 18勿入网站免费永久| 亚洲国产精品综合久久20| 日韩在线视频免费看| CAOPORM国产精品视频免费| 亚洲成AV人片在线观看无| 亚洲免费中文字幕| 亚洲国产精品嫩草影院| 美腿丝袜亚洲综合| 日韩精品无码免费一区二区三区| 亚洲小说图片视频| 日韩亚洲国产综合久久久| a级毛片毛片免费观看久潮| 亚洲精品美女久久久久| 日本特黄特色aa大片免费| 好男人资源在线WWW免费| 亚洲无人区视频大全| 免费夜色污私人影院在线观看| 99精品免费视品| 456亚洲人成影院在线观| 亚洲一级片免费看| 18禁美女黄网站色大片免费观看| 国产精品国产亚洲区艳妇糸列短篇|