<?xml version="1.0" encoding="gb2312"?>
	<rss version="2.0">
		<channel>
		<title><![CDATA[J.Y.N]]></title>
		<description><![CDATA[NAN]]></description>
		<link>http://www.cublog.cn/u/1677/</link>
		<language>zh-cn</language>
		<generator>www.cublog.cn</generator>
		<copyright>Copyright 2010 ChinaUnix.Net All Rights Reserved</copyright>
		<pubDate>Fri, 03 Sep 2010 02:16:27 GMT</pubDate>
	
		<item>
			<title><![CDATA[我写的一段程序，内嵌一个ＷＥＢ服务器，提供在线升级功能．需要的可以提供源码]]></title>
			<link><![CDATA[http://blog.chinaunix.net/u/1677/showart.php?id=84969]]></link>
			<author></author>
			<guid></guid>
			<category></category>
			<pubDate>Tue, 14 Mar 2006 01:44:16 GMT</pubDate>
			<comments></comments>
			<description><![CDATA[<DIV>
<DIV align=center>&nbsp;</DIV>前一段时间写的一个系统给用户，用户总是说Ｔｏｍｃａｔ的Ｄｏｓ框很难看，而且容易关掉，并且不能很明白的看到运行的日志，所以看仿别人的样子写了这样的一个程序，需要的可以试用一下，如查需要源码，可以发邮件给我．</DIV>
<DIV>&nbsp;</DIV>
<DIV>图：<IMG src="http://www.cublog.cn/u/1677/upfile/060314093755.jpg" onload="javascript:if(this.width>500)this.width=500;" border=0></DIV>
<DIV>&nbsp;</DIV>
<DIV>　　
<DIV align=center><IMG src="http://www.cublog.cn/u/1677/upf……  ]]></description>
		</item>	
			<item>
			<title><![CDATA[ 这些是我经常使用的一些Java代码查询网站，希望在这里能起到抛砖引玉的效果，大家群策群力，一起分享]]></title>
			<link><![CDATA[http://blog.chinaunix.net/u/1677/showart.php?id=67293]]></link>
			<author></author>
			<guid></guid>
			<category></category>
			<pubDate>Thu, 12 Jan 2006 06:03:50 GMT</pubDate>
			<comments></comments>
			<description><![CDATA[<DIV>&nbsp;这些是我经常使用的一些Java代码查询网站，希望在这里能起到抛砖引玉的效果，大家群策群力，一起分享Java快乐。
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;1.&nbsp;java2s &nbsp;<A href="http://www.java2s.com/"><FONT color=#0000ff>http://www.java2s.com/</FONT></A></DIV>
<DIV>&nbsp;&nbsp;&nbsp;这个网站非常好，分成三大类，分别是<FONT color=#0000ff size=2><A href="http://www.java2s.com/">Example</A></FONT>、<FONT size=2><A href="http://www.java2s.com/Product/CatalogProduct.htm"><FONT color=#003399>Pro……  ]]></description>
		</item>	
			<item>
			<title><![CDATA[使用 commons-configuration 读配置文件]]></title>
			<link><![CDATA[http://blog.chinaunix.net/u/1677/showart.php?id=67255]]></link>
			<author></author>
			<guid></guid>
			<category></category>
			<pubDate>Thu, 12 Jan 2006 03:58:13 GMT</pubDate>
			<comments></comments>
			<description><![CDATA[<DIV>&nbsp;&nbsp;&nbsp;XMLConfiguration config = new XMLConfiguration(configFile);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;String port = config.getString("server.port");</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; 文件内容:</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp; &lt;?xml version="1.0" encoding="UTF-8"?&gt;<BR>&lt;xml-body&gt;</DIV>
<DIV>&nbsp;&lt;server&gt;<BR>&nbsp;&nbsp;&lt;port&gt;990&lt;/port&gt;<BR>&nbsp;&nbsp;&lt;securePort&gt;0&lt;/securePort&gt;<BR>&nbsp;&nbsp;&lt;domain&g……  ]]></description>
		</item>	
			<item>
			<title><![CDATA[程序嵌入Tomcat服务器]]></title>
			<link><![CDATA[http://blog.chinaunix.net/u/1677/showart.php?id=67253]]></link>
			<author></author>
			<guid></guid>
			<category></category>
			<pubDate>Thu, 12 Jan 2006 03:52:51 GMT</pubDate>
			<comments></comments>
			<description><![CDATA[<DIV>&nbsp;</DIV>
<DIV>import org.apache.commons.logging.Log;<BR>import org.apache.commons.logging.LogFactory;<BR>import org.apache.catalina.Connector;<BR>import org.apache.catalina.Context;<BR>import org.apache.catalina.Engine;<BR>import org.apache.catalina.Host;<BR>import org.apache.catalina.LifecycleException;<BR>import org.apache.catalina.Logger;<BR>import org.apache.catalina.logger.FileLogger;<BR>import org.apache.catalina.startup.Embedded;<BR>import org.yak.util.YAKGlobals;</DIV>
<DIV>im……  ]]></description>
		</item>	
			<item>
			<title><![CDATA[使用Java Service Wrapper 把Java程序作为Windows系统服务]]></title>
			<link><![CDATA[http://blog.chinaunix.net/u/1677/showart.php?id=67084]]></link>
			<author></author>
			<guid></guid>
			<category></category>
			<pubDate>Wed, 11 Jan 2006 09:01:50 GMT</pubDate>
			<comments></comments>
			<description><![CDATA[  ]]></description>
		</item>	
			<item>
			<title><![CDATA[Struts Hack！解决中文参数在Form Bean中的乱码问题！ ]]></title>
			<link><![CDATA[http://blog.chinaunix.net/u/1677/showart.php?id=66674]]></link>
			<author></author>
			<guid></guid>
			<category></category>
			<pubDate>Tue, 10 Jan 2006 03:14:48 GMT</pubDate>
			<comments></comments>
			<description><![CDATA[<DIV>一句话...Struts的Action Servlet存在缺陷...用继承吧...&nbsp; <PRE class=CodeFormat><DIV><SPAN style="COLOR: rgb(0,0,255)">package</SPAN><SPAN style="COLOR: rgb(0,0,0)"> net.csdn.blog.xport.struts;……  ]]></description>
		</item>	
			<item>
			<title><![CDATA[使用TrueLicense来保护我们的JAVA软件产品]]></title>
			<link><![CDATA[http://blog.chinaunix.net/u/1677/showart.php?id=65519]]></link>
			<author></author>
			<guid></guid>
			<category></category>
			<pubDate>Thu, 05 Jan 2006 03:44:00 GMT</pubDate>
			<comments></comments>
			<description><![CDATA[<DIV>
<H1><A name=%E4%BD%BF%E7%94%A8TrueLicense%E6%9D%A5%E4%BF%9D%E6%8A%A4%E6%88%91%E4%BB%AC%E7%9A%84JAVA%E8%BD%AF%E4%BB%B6%E4%BA%A7%E5%93%81-%E4%BD%BF%E7%94%A8TrueLicense%E6%9D%A5%E4%BF%9D%E6%8A%A4%E6%88%91%E4%BB%AC%E7%9A%84JAVA%E8%BD%AF%E4%BB%B6%E4%BA%A7%E5%93%81>使用TrueLicense来保护我们的JAVA软件产品</A></H1>
<P>也可以查看我的wiki:http://sms.i6688.com/pages/viewpage.action?pageId=25</P>
<P>我们的JAVA软件产品有时需要限制非法用户，只有购买了LICENSE的用户才能使用，因此，我们可以通过TrueLicense来实现。</P>
<P>首先要用KeyTool工具来生成私匙库：</P>
<DIV class=code>
<DIV class=codeContent><PRE class=code-java>keytool -genkey -alias privatekey -keystore privateKeys.store</PRE></DIV></DIV>
<P>然后把私匙库内的公匙导出到一个文件当中：</P>
<DIV class=code>
<DIV class=codeContent><PRE class=code-java>keytool -export -alias privatekey -file certfile.cer -keystore privateKeys.store</PRE></DIV></DIV>
<P>然后再把这个证书文件导入到公匙库：</P>
<DIV class=code>
<DIV class=codeContent><PRE class=code-java>keytool -<SPAN class=code-keyword>import</SPAN> -alias publiccert -file certfile.cer -keystore publicCerts.store</PRE></DIV></DIV>
<H3><A name=%E4%BD%BF%E7%94%A8TrueLicense%E6%9D%A5%E4%BF%9D%E6%8A%A4%E6%88%91%E4%BB%AC%E7%9A%84JAVA%E8%BD%AF%E4%BB%B6%E4%BA%A7%E5%93%81-%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E5%88%A9%E7%94%A8%E7%A7%81%E5%8C%99%E5%BA%93%E6%9D%A5%E5%88%9B%E5%BB%BAlicense%E7%9A%84%E4%BB%A3%E7%A0%81%E4%BE%8B%E5%AD%90%EF%BC%9A>服务器端利用私匙库来创建license的代码例子：</A></H3>
<DIV class=code>
<DIV class=codeContent><PRE class=code-java><SPAN class=code-keyword>package</SPAN> com.sourceware.license;

<SPAN class=code-keyword>import</SPAN> de.schlichtherle.license.*;
<SPAN class=code-keyword>import</SPAN> java.io.*;
<SPAN class=code-keyword>import</SPAN> java.util.*;
<SPAN class=code-keyword>import</SPAN> javax.security.auth.x500.X500Principal;
<SPAN class=code-keyword>import</SPAN> java.util.prefs.Preferences;

/**
 * &lt;p&gt;Title: CMVP通用媒体增值业务平台&lt;/p&gt;
 *
 * &lt;p&gt;Description: CMVP通用媒体增值业务平台&lt;/p&gt;
 *
 * &lt;p&gt;Copyright: Copyright (c) 2005&lt;/p&gt;
 *
 * &lt;p&gt;Company: source-ware.com inc.&lt;/p&gt;
 *
 * @author 黑山
 * @version 2.0
 */
<SPAN class=code-keyword>public</SPAN> class SWLicenseManager {
  <SPAN class=code-keyword>public</SPAN> SWLicenseManager() {
  }

  LicenseContent verifyLicenseKey(LicenseParam parameter) {
    <SPAN class=code-comment>// Create a configured license manager.
</SPAN>    LicenseManager manager = <SPAN class=code-keyword>new</SPAN> LicenseManager(parameter);
    <SPAN class=code-keyword>try</SPAN> {
      <SPAN class=code-comment>// Verify the previously installed current license certificate.
</SPAN>      <SPAN class=code-keyword>return</SPAN> manager.verify();
    }
    <SPAN class=code-keyword>catch</SPAN> (Exception exc) {
      <SPAN class=code-object>System</SPAN>.err.println(<SPAN class=code-quote>"Could not verify license key"</SPAN>);
      exc.printStackTrace();
      <SPAN class=code-keyword>return</SPAN> <SPAN class=code-keyword>null</SPAN>;
    }
  }

  void installLicenseKey(LicenseParam parameter, File keyFile) {
    <SPAN class=code-comment>// Create a configured license manager.
</SPAN>    LicenseManager manager = <SPAN class=code-keyword>new</SPAN> LicenseManager(parameter);
    <SPAN class=code-keyword>try</SPAN> {
      <SPAN class=code-comment>// Load the license key, verify and install it as the current license key.
</SPAN>      manager.install(keyFile);
    }
    <SPAN class=code-keyword>catch</SPAN> (Exception exc) {
      <SPAN class=code-object>System</SPAN>.err.println(<SPAN class=code-quote>"Could not install license certificate"</SPAN>);
      exc.printStackTrace();
    }
  }

  void createLicenseKey(LicenseParam parameter, LicenseContent content) {
    <SPAN class=code-comment>// Create a configured license manager.
</SPAN>    LicenseManager manager = <SPAN class=code-keyword>new</SPAN> LicenseManager(parameter);
    <SPAN class=code-keyword>try</SPAN> {
      <SPAN class=code-comment>// Create the license key from the license content and save it to a file.
</SPAN>      manager.store(content, <SPAN class=code-keyword>new</SPAN> File(<SPAN class=code-quote>"license.lic"</SPAN>));
    }
    <SPAN class=code-keyword>catch</SPAN> (Exception exc) {
      <SPAN class=code-object>System</SPAN>.err.println(<SPAN class=code-quote>"Could not save license key"</SPAN>);
      exc.printStackTrace();
    }
  }

  <SPAN class=code-comment>//
</SPAN>  <SPAN class=code-comment>// Customizable global properties.
</SPAN>  <SPAN class=code-comment>//
</SPAN>
  /** The product id of your software */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> PRODUCT_ID = <SPAN class=code-quote>"cmvp20"</SPAN>; <SPAN class=code-comment>// CUSTOMIZE
</SPAN>
  /**
   * The subject <SPAN class=code-keyword>for</SPAN> the license manager and also the alias of the <SPAN class=code-keyword>private</SPAN>
   * key entry in the keystore.
   */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> SUBJECT = <SPAN class=code-quote>"别名"</SPAN>; <SPAN class=code-comment>// CUSTOMIZE
</SPAN>
  /** The resource name of your <SPAN class=code-keyword>private</SPAN> keystore file. */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> KEYSTORE_RESOURCE = <SPAN class=code-quote>"私匙库文件名"</SPAN>; <SPAN class=code-comment>// CUSTOMIZE
</SPAN>
  /** The password <SPAN class=code-keyword>for</SPAN> the keystore. */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> KEYSTORE_STORE_PWD = <SPAN class=code-quote>"私匙库密码"</SPAN>; <SPAN class=code-comment>// CUSTOMIZE
</SPAN>
  /* The password <SPAN class=code-keyword>for</SPAN> the <SPAN class=code-keyword>private</SPAN> key entry in the keystore. */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> KEYSTORE_KEY_PWD = <SPAN class=code-quote>"私匙库主键密码"</SPAN>; <SPAN class=code-comment>// CUSTOMIZE
</SPAN>
  /** The password to encrypt the generated license key file. */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> CIPHER_KEY_PWD = <SPAN class=code-quote>"即将生成的license密码"</SPAN>; <SPAN class=code-comment>// CUSTOMIZE
</SPAN>
  /**
   * The filename to be displayed <SPAN class=code-keyword>for</SPAN> the generated binary key file when
   * delivered. Please note that <SPAN class=code-keyword>this</SPAN> is not used to write to a file of
   * <SPAN class=code-keyword>this</SPAN> name.
   */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> DISPLAY_FILENAME = <SPAN class=code-quote>"license.lic"</SPAN>; <SPAN class=code-comment>// CUSTOMIZE
</SPAN>
  <SPAN class=code-comment>//
</SPAN>  <SPAN class=code-comment>// The <SPAN class=code-keyword>rest</SPAN> of <SPAN class=code-keyword>this</SPAN> key generator does not need to get customized.
</SPAN>  <SPAN class=code-comment>//
</SPAN>
  /** The MIME type of the generated binary key file. */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> MIME_TYPE = <SPAN class=code-quote>"application/octet-stream"</SPAN>;

  <SPAN class=code-comment>//
</SPAN>  <SPAN class=code-comment>// Possible key generator exit codes
</SPAN>  <SPAN class=code-comment>//
</SPAN>
  /**
   * Return &lt;code&gt;ERC_SUCCESS&lt;/code&gt; on succesful creation of a textual key.
   * Note that <SPAN class=code-keyword>this</SPAN> example creates a binary key and thus <SPAN class=code-keyword>this</SPAN> constant is not
   * used here
   */
  <SPAN class=code-comment>//<SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>int</SPAN> ERC_SUCCESS = 00;
</SPAN>
  /**
   * Return &lt;code&gt;ERC_SUCCESS_BIN&lt;/code&gt; on succesful creation of a binary
   * key. (Which could contain text as well, <SPAN class=code-keyword>if</SPAN> the content type is specified
   * as &lt;code&gt;text/plain&lt;/code&gt;)
   */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>int</SPAN> ERC_SUCCESS_BIN = 01;

  /**
   * Return &lt;code&gt;ERC_ERROR&lt;/code&gt; <SPAN class=code-keyword>for</SPAN> general errors.
   */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>int</SPAN> ERC_ERROR = 10;

  /**
   * Return &lt;code&gt;ERC_MEMORY&lt;/code&gt; <SPAN class=code-keyword>if</SPAN> memory allocation fails.
   */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>int</SPAN> ERC_MEMORY = 11;

  /**
   * Return &lt;code&gt;ERC_FILE_IO&lt;/code&gt; on IOException
   */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>int</SPAN> ERC_FILE_IO = 12;

  /**
   * Return &lt;code&gt;ERC_BAD_ARGS&lt;/code&gt; <SPAN class=code-keyword>if</SPAN> the command line parameters are
   * bad.
   */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>int</SPAN> ERC_BAD_ARGS = 13;

  /**
   * Return &lt;code&gt;ERC_BAD_INPUT&lt;/code&gt; <SPAN class=code-keyword>if</SPAN> a particular input value is
   * missing or has a bad value. Don't forget to supply a meaningful error
   * message naming the exact cause of the error.
   */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>int</SPAN> ERC_BAD_INPUT = 14;

  /**
   * Return &lt;code&gt;ERC_EXPIRED&lt;/code&gt; <SPAN class=code-keyword>if</SPAN> <SPAN class=code-keyword>this</SPAN> generator is expired. This can
   * be used to limit the lifetime of <SPAN class=code-keyword>this</SPAN> generator.
   */
  <SPAN class=code-comment>//<SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>int</SPAN> ERC_EXPIRED = 15;
</SPAN>
  /**
   * Return &lt;code&gt;ERC_INTERNAL&lt;/code&gt; <SPAN class=code-keyword>if</SPAN> an unhandled exception occurs.
   *
   * @see java.lang.Exception
   */
  <SPAN class=code-comment>//<SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>int</SPAN> ERC_INTERNAL = 16;
</SPAN>
  /** Encoding keys in properties. */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> ENCODING_KEY = <SPAN class=code-quote>"ENCODING"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> PRODUCT_ID_KEY = <SPAN class=code-quote>"PRODUCT_ID"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> PURCHASE_ID_KEY = <SPAN class=code-quote>"PURCHASE_ID"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> RUNNING_NO_KEY = <SPAN class=code-quote>"RUNNING_NO"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> PURCHASE_DATE_KEY = <SPAN class=code-quote>"PURCHASE_DATE"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> LANGUAGE_ID_KEY = <SPAN class=code-quote>"LANGUAGE_ID"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> QUANTITY_KEY = <SPAN class=code-quote>"QUANTITY"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> REG_NAME_KEY = <SPAN class=code-quote>"REG_NAME"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> ADDITIONAL1_KEY = <SPAN class=code-quote>"ADDITIONAL1"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> ADDITIONAL2_KEY = <SPAN class=code-quote>"ADDITIONAL2"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> RESELLER_KEY = <SPAN class=code-quote>"RESELLER"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> LASTNAME_KEY = <SPAN class=code-quote>"LASTNAME"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> FIRSTNAME_KEY = <SPAN class=code-quote>"FIRSTNAME"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> COMPANY_KEY = <SPAN class=code-quote>"COMPANY"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> EMAIL_KEY = <SPAN class=code-quote>"EMAIL"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> PHONE_KEY = <SPAN class=code-quote>"PHONE"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> FAX_KEY = <SPAN class=code-quote>"FAX"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> STREET_KEY = <SPAN class=code-quote>"STREET"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> ZIP_KEY = <SPAN class=code-quote>"ZIP"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> CITY_KEY = <SPAN class=code-quote>"CITY"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> STATE_KEY = <SPAN class=code-quote>"STATE"</SPAN>;
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> COUNTRY_KEY = <SPAN class=code-quote>"COUNTRY"</SPAN>;

  /** Default encoding <SPAN class=code-keyword>for</SPAN> properties. */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> ENCODING_PROPERTIES = <SPAN class=code-quote>"ISO-8859-1"</SPAN>;

  /** Default share-it encoding <SPAN class=code-keyword>if</SPAN> key not present in properties. */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> ENCODING_DEFAULT = ENCODING_PROPERTIES;

  <SPAN class=code-keyword>protected</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> LicenseManager manager = <SPAN class=code-keyword>new</SPAN> LicenseManager(
      <SPAN class=code-keyword>new</SPAN> DefaultLicenseParam(
          SUBJECT,
          Preferences.userRoot(),
          <SPAN class=code-keyword>new</SPAN> DefaultKeyStoreParam(
              SWLicenseManager.class, <SPAN class=code-comment>// CUSTOMIZE
</SPAN>              KEYSTORE_RESOURCE,
              SUBJECT,
              KEYSTORE_STORE_PWD,
              KEYSTORE_KEY_PWD),
          <SPAN class=code-keyword>new</SPAN> DefaultCipherParam(CIPHER_KEY_PWD)));

  /**
   * Validates the properties and generates a license certificate file.
   */
  <SPAN class=code-keyword>private</SPAN> <SPAN class=code-keyword>static</SPAN> void generateLicense(Properties props, File certFile) <SPAN class=code-keyword>throws</SPAN>
      Exception {
    <SPAN class=code-comment>// Check <SPAN class=code-keyword>for</SPAN> supported product id.
</SPAN>    <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> productId = props.getProperty(PRODUCT_ID_KEY);
    <SPAN class=code-keyword>if</SPAN> (!PRODUCT_ID.equals(productId)) {
      <SPAN class=code-keyword>throw</SPAN> <SPAN class=code-keyword>new</SPAN> BadInputException(<SPAN class=code-quote>"Bad product ID: "</SPAN> + productId);
    }

    <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>StringBuffer</SPAN> dn = <SPAN class=code-keyword>new</SPAN> <SPAN class=code-object>StringBuffer</SPAN>();
    addAttribute(dn, <SPAN class=code-quote>"CN"</SPAN>, props.getProperty(FIRSTNAME_KEY)
                 + ' ' + props.getProperty(LASTNAME_KEY));
    <SPAN class=code-keyword>if</SPAN> (dn.length() == 0) {
      addAttribute(dn, <SPAN class=code-quote>"CN"</SPAN>, props, REG_NAME_KEY);
    }
    addAttribute(dn, <SPAN class=code-quote>"O"</SPAN>, props, COMPANY_KEY);
    addAttribute(dn, <SPAN class=code-quote>"STREET"</SPAN>, props, STREET_KEY);
    addAttribute(dn, <SPAN class=code-quote>"L"</SPAN>, props.getProperty(ZIP_KEY)
                 + ' ' + props.getProperty(CITY_KEY));
    addAttribute(dn, <SPAN class=code-quote>"ST"</SPAN>, props, STATE_KEY);
    addAttribute(dn, <SPAN class=code-quote>"C"</SPAN>, props, COUNTRY_KEY);
    <SPAN class=code-keyword>final</SPAN> X500Principal holder = <SPAN class=code-keyword>new</SPAN> X500Principal(dn.toString());
    <SPAN class=code-keyword>final</SPAN> X500Principal issuer = <SPAN class=code-keyword>new</SPAN> X500Principal(
        <SPAN class=code-quote>"OU=share-it!,O=element 5 AG,STREET=Vogelsanger Strasse 78,L=50823 Ku00F6ln,ST=Nordrhein-Westfalen,C=DE"</SPAN>);

    <SPAN class=code-keyword>final</SPAN> LicenseContent content = <SPAN class=code-keyword>new</SPAN> LicenseContent();
    content.setHolder(holder);
    content.setIssuer(issuer);
    content.setConsumerType(<SPAN class=code-quote>"User"</SPAN>);
    content.setConsumerAmount(1);
    content.setInfo(props.toString());
    content.setSubject(SUBJECT);
    java.util.Calendar cal =java.util.Calendar.getInstance();
    cal.set(2006,1,1);
    content.setNotAfter(cal.getTime());
    manager.store(content, certFile);
  }

  <SPAN class=code-keyword>private</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> void addAttribute(
      <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>StringBuffer</SPAN> dn,
      <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> oid,
      <SPAN class=code-keyword>final</SPAN> Properties props,
      <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> key) {
    addAttribute(dn, oid, props.getProperty(key));
  }

  <SPAN class=code-keyword>private</SPAN> <SPAN class=code-keyword>static</SPAN> void addAttribute(
      <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>StringBuffer</SPAN> dn,
      <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> oid,
      <SPAN class=code-object>String</SPAN> value) {
    <SPAN class=code-keyword>if</SPAN> (value == <SPAN class=code-keyword>null</SPAN>) {
      <SPAN class=code-keyword>return</SPAN>;
    }

    <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> trimmedValue = value.trim();
    <SPAN class=code-keyword>if</SPAN> ("".equals(trimmedValue)) {
      <SPAN class=code-keyword>return</SPAN>;
    }

    <SPAN class=code-comment>// See http://www.ietf.org/rfc/rfc2253.txt
</SPAN>    <SPAN class=code-object>boolean</SPAN> quote = <SPAN class=code-keyword>false</SPAN>;
    <SPAN class=code-keyword>if</SPAN> (!value.equals(trimmedValue)) {
      quote = <SPAN class=code-keyword>true</SPAN>;
    }
    <SPAN class=code-keyword>else</SPAN> <SPAN class=code-keyword>if</SPAN> (value.matches(<SPAN class=code-quote>".*[+,;&lt;&gt;"</SPAN>].*")) {
      ;
    }
    quote = <SPAN class=code-keyword>true</SPAN>;

    <SPAN class=code-keyword>if</SPAN> (dn.length() != 0) {
      dn.append(',');
    }
    dn.append(oid);
    dn.append('=');
    <SPAN class=code-keyword>if</SPAN> (quote) {
      dn.append('"');
    }
    <SPAN class=code-comment>// Replace every single backslash with two backslashes
</SPAN>    <SPAN class=code-comment>// whereas both parameters are expressed as regular expressions.
</SPAN>    value = value.replaceAll(<SPAN class=code-quote>"\"</SPAN>, <SPAN class=code-quote>"\\"</SPAN>);
    <SPAN class=code-comment>// Replace every single quote with an escaped quote
</SPAN>    <SPAN class=code-comment>// whereas both parameters are expressed as regular expressions.
</SPAN>    value = value.replaceAll(<SPAN class=code-quote>""</SPAN><SPAN class=code-quote>", "</SPAN>\"");
    dn.append(value);
    <SPAN class=code-keyword>if</SPAN> (quote) {
      dn.append('"');
    }
  }

  <SPAN class=code-keyword>private</SPAN> <SPAN class=code-keyword>static</SPAN> Properties readInput(<SPAN class=code-object>String</SPAN> pathname) <SPAN class=code-keyword>throws</SPAN> IOException {
    Properties props = <SPAN class=code-keyword>new</SPAN> EncodedProperties();
    InputStream in = <SPAN class=code-keyword>new</SPAN> FileInputStream(pathname);
    <SPAN class=code-keyword>try</SPAN> {
      props.load(in);
    }
    <SPAN class=code-keyword>catch</SPAN> (IllegalArgumentException iae) {
      <SPAN class=code-keyword>throw</SPAN> <SPAN class=code-keyword>new</SPAN> BadInputException(iae);
    }
    <SPAN class=code-keyword>finally</SPAN> {
      in.close();
    }

    <SPAN class=code-keyword>return</SPAN> props;
  }

  /**
   * This is the main entry point <SPAN class=code-keyword>for</SPAN> JAVA key generators. It processes the
   * command line arguments, loads and parses the input file, calls the key
   * generator and writes output files.
   *
   * JAVA Exceptions are handled and transformed into key generator error
   * codes. Exception messages will be written to &lt;code&gt;args[1]&lt;/code&gt; and
   * display on the error console.
   */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-object>int</SPAN> KeyMain(<SPAN class=code-object>String</SPAN> args[]) {
    args = <SPAN class=code-keyword>new</SPAN> <SPAN class=code-object>String</SPAN>[3];
    args[0] = <SPAN class=code-quote>"license.properties"</SPAN>;
    args[1] = <SPAN class=code-quote>"license.status"</SPAN>;
    args[2] = <SPAN class=code-quote>"license.lic"</SPAN>;

    <SPAN class=code-keyword>if</SPAN> (args.length != 3) {
      <SPAN class=code-object>System</SPAN>.err.println(<SPAN class=code-quote>"Usage: &lt;input&gt; &lt;output1&gt; &lt;output2&gt;"</SPAN>);

      <SPAN class=code-keyword>return</SPAN> ERC_BAD_ARGS;
    }

    <SPAN class=code-object>int</SPAN> errorCode = ERC_ERROR;
    PrintWriter out = <SPAN class=code-keyword>new</SPAN> PrintWriter(<SPAN class=code-object>System</SPAN>.err);
    <SPAN class=code-keyword>try</SPAN> {
      <SPAN class=code-keyword>try</SPAN> {
        <SPAN class=code-comment>// Read input and get encoding
</SPAN>        <SPAN class=code-keyword>final</SPAN> Properties props = readInput(args[0]);
        <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> encoding
            = props.getProperty(ENCODING_KEY, ENCODING_DEFAULT);

        <SPAN class=code-comment>// Setup real output with encoding read from input file.
</SPAN>        out = <SPAN class=code-keyword>new</SPAN> PrintWriter(
            <SPAN class=code-keyword>new</SPAN> OutputStreamWriter(
                <SPAN class=code-keyword>new</SPAN> FileOutputStream(args[1]),
                encoding));

        <SPAN class=code-comment>// Validate input and generate key file.
</SPAN>        generateLicense(props, <SPAN class=code-keyword>new</SPAN> File(args[2]));

        <SPAN class=code-comment>// Write status.
</SPAN>        out.write(MIME_TYPE + <SPAN class=code-quote>":"</SPAN> + DISPLAY_FILENAME);
      }
      <SPAN class=code-keyword>catch</SPAN> (BadInputException bie) {
        errorCode = ERC_BAD_INPUT;
        <SPAN class=code-keyword>throw</SPAN> bie;
      }
      <SPAN class=code-keyword>catch</SPAN> (IOException ioe) {
        errorCode = ERC_FILE_IO;
        <SPAN class=code-keyword>throw</SPAN> ioe;
      }
      <SPAN class=code-keyword>catch</SPAN> (OutOfMemoryError oome) {
        errorCode = ERC_MEMORY;
        <SPAN class=code-keyword>throw</SPAN> oome;
      }
    }
    <SPAN class=code-keyword>catch</SPAN> (Throwable t) {
      out.println(<SPAN class=code-quote>"Error #"</SPAN> + errorCode);
      t.printStackTrace(out);

      <SPAN class=code-keyword>return</SPAN> errorCode;
    }
    <SPAN class=code-keyword>finally</SPAN> {
      out.close();
    }

    <SPAN class=code-keyword>return</SPAN> ERC_SUCCESS_BIN;
  }

  /**
   * NOTE: This main() method is never called by the actual key server. It is
   * just useful <SPAN class=code-keyword>for</SPAN> debugging the key generator.
   */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> void main(<SPAN class=code-object>String</SPAN> args[]) {
    KeyMain(args);
    /*<SPAN class=code-keyword>try</SPAN>{
      manager.install(<SPAN class=code-keyword>new</SPAN> java.io.File(<SPAN class=code-quote>"swutil.log"</SPAN>));
      <SPAN class=code-object>System</SPAN>.out.println(<SPAN class=code-quote>"subject="</SPAN> + manager.verify().getSubject());
      <SPAN class=code-object>System</SPAN>.exit(0);
         }<SPAN class=code-keyword>catch</SPAN>(Exception ex){
      ex.printStackTrace();
         }*/
  }

  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> class EncodedProperties
      <SPAN class=code-keyword>extends</SPAN> Properties {
    <SPAN class=code-keyword>public</SPAN> EncodedProperties() {
      <SPAN class=code-keyword>this</SPAN>(<SPAN class=code-keyword>new</SPAN> Properties());
    }

    /**
     * @<SPAN class=code-keyword>throws</SPAN> NullPointerException <SPAN class=code-keyword>if</SPAN> &lt;tt&gt;defaults&lt;/tt&gt; is &lt;tt&gt;<SPAN class=code-keyword>null</SPAN>&lt;/tt&gt;.
     */
    <SPAN class=code-keyword>public</SPAN> EncodedProperties(Properties defaults) {
      <SPAN class=code-keyword>super</SPAN>(defaults);

      <SPAN class=code-comment>// Make sure we have a proper <SPAN class=code-keyword>default</SPAN> <SPAN class=code-keyword>for</SPAN> the encoding.
</SPAN>      defaults.setProperty(ENCODING_KEY, ENCODING_DEFAULT);
    }

    <SPAN class=code-keyword>public</SPAN> void load(InputStream inStream) <SPAN class=code-keyword>throws</SPAN> IOException {
      <SPAN class=code-keyword>super</SPAN>.load(inStream);

      <SPAN class=code-object>String</SPAN> encoding = <SPAN class=code-keyword>super</SPAN>.getProperty(ENCODING_KEY);
      <SPAN class=code-keyword>if</SPAN> (ENCODING_PROPERTIES.equals(encoding)) {
        <SPAN class=code-keyword>return</SPAN>;
      }

      <SPAN class=code-comment>// Convert properties
</SPAN>      <SPAN class=code-keyword>try</SPAN> {
        Map.Entry[] entries = <SPAN class=code-keyword>new</SPAN> Map.Entry[entrySet().size()];
        entrySet().toArray(entries);
        <SPAN class=code-keyword>for</SPAN> (<SPAN class=code-object>int</SPAN> i = entries.length; --i &gt;= 0; ) {
          Map.Entry entry = entries[i];
          <SPAN class=code-object>String</SPAN> value = (<SPAN class=code-object>String</SPAN>) entry.getValue();
          value = <SPAN class=code-keyword>new</SPAN> <SPAN class=code-object>String</SPAN>(value.getBytes(ENCODING_PROPERTIES),
                             encoding);
          setProperty( (<SPAN class=code-object>String</SPAN>) entry.getKey(), value);
        }
      }
      <SPAN class=code-keyword>catch</SPAN> (UnsupportedEncodingException ignored) {}
    }
  }

  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> class BadInputException
      <SPAN class=code-keyword>extends</SPAN> IOException {
    <SPAN class=code-keyword>public</SPAN> BadInputException(<SPAN class=code-object>String</SPAN> message) {
      <SPAN class=code-keyword>super</SPAN>(message);
    }

    <SPAN class=code-keyword>public</SPAN> BadInputException(Throwable cause) {
      initCause(cause);
    }
  }

}</PRE></DIV></DIV>
<H3><A name=%E4%BD%BF%E7%94%A8TrueLicense%E6%9D%A5%E4%BF%9D%E6%8A%A4%E6%88%91%E4%BB%AC%E7%9A%84JAVA%E8%BD%AF%E4%BB%B6%E4%BA%A7%E5%93%81-%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%A8%8B%E5%BA%8F%E5%AE%89%E8%A3%85license%E4%BB%A5%E5%8F%8A%E6%A3%80%E9%AA%8Clicense%E5%90%88%E6%B3%95%E6%80%A7%E7%9A%84%E4%BB%A3%E7%A0%81%EF%BC%9A>客户端程序安装license以及检验license合法性的代码：</A></H3>
<DIV class=information-block align=center>
<DIV class=informationMacroPadding>
<TABLE class=warningMacro cellSpacing=0 cellPadding=5 width="85%" border=0>
<TBODY>
<TR>
<TD vAlign=top width=16><IMG height=16 alt="" src="http://sms.i6688.com/images/icons/emoticons/forbidden.gif" width=16 align=absMiddle border=0></TD>
<TD><B class=strong>安全警告</B><BR>不要把私匙库拷贝到客户端，而只拷贝公匙库，要不然黑客就可以用你的私匙库来生成许许多多的license了</TD></TR></TBODY></TABLE></DIV></DIV>
<DIV class=code>
<DIV class=codeContent><PRE class=code-java><SPAN class=code-keyword>package</SPAN> com.sourceware.cmvp.license;

<SPAN class=code-keyword>import</SPAN> de.schlichtherle.license.*;
<SPAN class=code-keyword>import</SPAN> java.io.*;
<SPAN class=code-keyword>import</SPAN> java.util.*;
<SPAN class=code-keyword>import</SPAN> javax.security.auth.x500.X500Principal;
<SPAN class=code-keyword>import</SPAN> java.util.prefs.Preferences;

/**
 * &lt;p&gt;Title: CMVP通用媒体增值业务平台&lt;/p&gt;
 *
 * &lt;p&gt;Description: CMVP通用媒体增值业务平台&lt;/p&gt;
 *
 * &lt;p&gt;Copyright: Copyright (c) 2005&lt;/p&gt;
 *
 * &lt;p&gt;Company: source-ware.com inc.&lt;/p&gt;
 *
 * @author 黑山
 * @version 2.0
 */
<SPAN class=code-keyword>public</SPAN> class CMVPLicenseManager {
  <SPAN class=code-keyword>public</SPAN> CMVPLicenseManager() {
  }

  /** The product id of your software */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> PRODUCT_ID = <SPAN class=code-quote>"cmvp20"</SPAN>; <SPAN class=code-comment>// CUSTOMIZE
</SPAN>
  /**
   * The subject <SPAN class=code-keyword>for</SPAN> the license manager and also the alias of the <SPAN class=code-keyword>private</SPAN>
   * key entry in the keystore.
   */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> SUBJECT = <SPAN class=code-quote>"别名"</SPAN>; <SPAN class=code-comment>// CUSTOMIZE
</SPAN>
  /** The resource name of your <SPAN class=code-keyword>private</SPAN> keystore file. */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> KEYSTORE_RESOURCE = <SPAN class=code-quote>"公匙库文件名"</SPAN>; <SPAN class=code-comment>// CUSTOMIZE
</SPAN>
  /** The password <SPAN class=code-keyword>for</SPAN> the keystore. */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> KEYSTORE_STORE_PWD = <SPAN class=code-quote>"公匙库密码"</SPAN>; <SPAN class=code-comment>// CUSTOMIZE
</SPAN>
  /** The password to encrypt the generated license key file. */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> <SPAN class=code-object>String</SPAN> CIPHER_KEY_PWD = <SPAN class=code-quote>"license文件密码"</SPAN>; <SPAN class=code-comment>// CUSTOMIZE
</SPAN>


  <SPAN class=code-keyword>protected</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> LicenseManager manager = <SPAN class=code-keyword>new</SPAN> LicenseManager(
      <SPAN class=code-keyword>new</SPAN> DefaultLicenseParam(
          SUBJECT,
          Preferences.userNodeForPackage(CMVPLicenseManager.class),
          <SPAN class=code-keyword>new</SPAN> DefaultKeyStoreParam(
              CMVPLicenseManager.class, <SPAN class=code-comment>// CUSTOMIZE
</SPAN>              KEYSTORE_RESOURCE,
              SUBJECT,
              KEYSTORE_STORE_PWD,
              <SPAN class=code-keyword>null</SPAN>),<SPAN class=code-comment>//这里一定要是null
</SPAN>          <SPAN class=code-keyword>new</SPAN> DefaultCipherParam(CIPHER_KEY_PWD)));

  /**
   * NOTE: This main() method is never called by the actual key server. It is
   * just useful <SPAN class=code-keyword>for</SPAN> debugging the key generator.
   */
  <SPAN class=code-keyword>public</SPAN> <SPAN class=code-keyword>static</SPAN> <SPAN class=code-keyword>final</SPAN> void main(<SPAN class=code-object>String</SPAN> args[]) {
    <SPAN class=code-keyword>try</SPAN> {
      
      manager.install(<SPAN class=code-keyword>new</SPAN> java.io.File(<SPAN class=code-quote>"license.lic"</SPAN>));
      <SPAN class=code-object>String</SPAN> subject = manager.verify().getSubject();
      <SPAN class=code-object>System</SPAN>.out.println(<SPAN class=code-quote>"subject========"</SPAN>+subject);
    }
    <SPAN class=code-keyword>catch</SPAN> (Exception ex) {
      ex.printStackTrace();
    }
  }

}</PRE></DIV></DIV></DIV>  ]]></description>
		</item>	
			<item>
			<title><![CDATA[代码生成 Html]]></title>
			<link><![CDATA[http://blog.chinaunix.net/u/1677/showart.php?id=63770]]></link>
			<author></author>
			<guid></guid>
			<category></category>
			<pubDate>Wed, 04 Jan 2006 00:53:20 GMT</pubDate>
			<comments></comments>
			<description><![CDATA[  ]]></description>
		</item>	
			<item>
			<title><![CDATA[页面中关于 Table 增加行,列,以及删除行列的代码]]></title>
			<link><![CDATA[http://blog.chinaunix.net/u/1677/showart.php?id=63753]]></link>
			<author></author>
			<guid></guid>
			<category></category>
			<pubDate>Tue, 27 Dec 2005 09:26:01 GMT</pubDate>
			<comments></comments>
			<description><![CDATA[<p>页面中关于 Table 增加行,列,以及删除行列的代码</p><p><center>
<!-- START NETSHELTER 728x90 JAVASCRIPT AD CODE v2.1 FOR JAVA2S.COM -->
<script language="javascript"><!--
d=new Date();flash=Math.round(Math.random()*d.getTime());
chk='E';document.cookie=chk+"="+chk+"; path=/";k=document.cookie.indexOf(chk+"="+chk,0)<0?0:1;cgi='http://servedby.netshelter.net';
document.write('<scr'+'ipt src="'+cgi+'/serve.cgi?pid=JAVA2S&g=1&m=9&j=1&k='+k+'&id='+flash+'&d=js"></scr'+'ipt>');
// -->
</script>……  ]]></description>
		</item>	
			<item>
			<title><![CDATA[开始]]></title>
			<link><![CDATA[http://blog.chinaunix.net/u/1677/showart.php?id=4218]]></link>
			<author></author>
			<guid></guid>
			<category></category>
			<pubDate>Mon, 01 Nov 2004 05:00:19 GMT</pubDate>
			<comments></comments>
			<description><![CDATA[希望可以在这里留下一些岁月的痕迹！  ]]></description>
		</item>	
			</channel>
	</rss>
