{"id":28525,"date":"2024-11-25T13:18:03","date_gmt":"2024-11-25T05:18:03","guid":{"rendered":"https:\/\/fwq.ai\/blog\/28525\/"},"modified":"2024-11-25T13:18:03","modified_gmt":"2024-11-25T05:18:03","slug":"%e4%ba%8c%e6%ac%a1%e5%bc%80%e5%8f%91%e5%be%ae%e4%bf%a1%e4%b9%8b%e8%af%b7%e6%b1%82%e9%aa%8c%e8%af%81","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/28525\/","title":{"rendered":"\u4e8c\u6b21\u5f00\u53d1\u5fae\u4fe1\u4e4b\u8bf7\u6c42\u9a8c\u8bc1"},"content":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4e3a\u5927\u5bb6\u8be6\u7ec6\u4ecb\u7ecd\u4e86java\u5fae\u4fe1\u4e8c\u6b21\u5f00\u53d1\u7b2c\u4e00\u7bc7\uff0cjava\u5fae\u4fe1\u8bf7\u6c42\u9a8c\u8bc1\u529f\u80fd\uff0c\u5177\u6709\u4e00\u5b9a\u7684\u53c2\u8003\u4ef7\u503c\uff0c\u611f\u5174\u8da3\u7684\u5c0f\u4f19\u4f34\u4eec\u53ef\u4ee5\u53c2\u8003\u4e00\u4e0b<\/p>\n<p>\u51c6\u5907\u7528Java\u505a\u4e00\u4e2a\u5fae\u4fe1\u4e8c\u6b21\u5f00\u53d1\u9879\u76ee\uff0c\u628a\u6d41\u7a0b\u5199\u5728\u8fd9\u91cc\u5427\u3002<\/p>\n<p>\u7b2c\u4e00\u7bc7\uff0c\u505a\u5fae\u4fe1\u8bf7\u6c42\u9a8c\u8bc1<\/p>\n<p>\u9700\u8981\u5bfc\u5165\u5e93\uff1aservlet-api.jar<\/p>\n<p><strong>\u7b2c\u4e00\u6b65\uff1a<\/strong>\u65b0\u5efa\u5305com.wtz.service\uff0c\u65b0\u5efa\u7c7bLoginServlet.java<\/p>\n<pre>package&nbsp;com.wtz.service;\r\n\r\nimport&nbsp;java.io.IOException;\r\nimport&nbsp;java.io.PrintWriter;\r\n\r\nimport&nbsp;javax.servlet.ServletException;\r\nimport&nbsp;javax.servlet.http.HttpServlet;\r\nimport&nbsp;javax.servlet.http.HttpServletRequest;\r\nimport&nbsp;javax.servlet.http.HttpServletResponse;\r\n\r\nimport&nbsp;com.wtz.util.ValidationUtil;\r\n\r\n\/**\r\n&nbsp;*&nbsp;\u3000\u3000@author&nbsp;wangtianze&nbsp;QQ:864620012\r\n&nbsp;*&nbsp;@date&nbsp;2017\u5e744\u670817\u65e5&nbsp;\u4e0b\u53488:11:32\r\n&nbsp;*&nbsp;&lt;p&gt;version:1.0&lt;\/p&gt;\r\n&nbsp;*&nbsp;&nbsp;&lt;p&gt;description:\u5fae\u4fe1\u8bf7\u6c42\u9a8c\u8bc1\u7c7b&lt;\/p&gt;\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;LoginServlet&nbsp;extends&nbsp;HttpServlet&nbsp;{\r\n\r\n&nbsp;@Override\r\n&nbsp;protected&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)\r\n&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{\r\n&nbsp;&nbsp;System.out.println(\"get\u8bf7\u6c42\u3002\u3002\u3002\u3002\u3002\u3002\");\r\n&nbsp;&nbsp;\r\n&nbsp;&nbsp;\/\/1.\u83b7\u5f97\u5fae\u4fe1\u7b7e\u540d\u7684\u52a0\u5bc6\u5b57\u7b26\u4e32\r\n&nbsp;&nbsp;String&nbsp;signature&nbsp;=&nbsp;request.getParameter(\"signature\");\r\n&nbsp;&nbsp;\r\n&nbsp;&nbsp;\/\/2.\u83b7\u5f97\u65f6\u95f4\u6233\u4fe1\u606f\r\n&nbsp;&nbsp;String&nbsp;timestamp&nbsp;=&nbsp;request.getParameter(\"timestamp\");\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;\/\/3.\u83b7\u5f97\u968f\u673a\u6570\r\n&nbsp;&nbsp;String&nbsp;nonce&nbsp;=&nbsp;request.getParameter(\"nonce\");\r\n&nbsp;&nbsp;\r\n&nbsp;&nbsp;\/\/4.\u83b7\u5f97\u968f\u673a\u5b57\u7b26\u4e32\r\n&nbsp;&nbsp;String&nbsp;echostr&nbsp;=&nbsp;request.getParameter(\"echostr\");\r\n&nbsp;&nbsp;\r\n&nbsp;&nbsp;System.out.println(\"\u83b7\u5f97\u5fae\u4fe1\u7b7e\u540d\u7684\u52a0\u5bc6\u5b57\u7b26\u4e32\uff1a\"+signature);\r\n&nbsp;&nbsp;System.out.println(\"\u83b7\u5f97\u65f6\u95f4\u6233\u4fe1\u606f\uff1a\"+timestamp);\r\n&nbsp;&nbsp;System.out.println(\"\u83b7\u5f97\u968f\u673a\u6570\uff1a\"+nonce);\r\n&nbsp;&nbsp;System.out.println(\"\u83b7\u5f97\u968f\u673a\u5b57\u7b26\u4e32\uff1a\"+echostr);\r\n&nbsp;&nbsp;\r\n&nbsp;&nbsp;PrintWriter&nbsp;out&nbsp;=&nbsp;response.getWriter();\r\n&nbsp;&nbsp;\r\n&nbsp;&nbsp;\/\/\u9a8c\u8bc1\u8bf7\u6c42\u786e\u8ba4\u6210\u529f\u539f\u6837\u8fd4\u56deechostr\u53c2\u6570\u5185\u5bb9\uff0c\u5219\u63a5\u5165\u751f\u6548\uff0c\u6210\u4e3a\u5f00\u53d1\u8005\u6210\u529f\uff0c\u5426\u5219\u5931\u8d25\r\n&nbsp;&nbsp;if(ValidationUtil.checkSignature(signature,&nbsp;timestamp,&nbsp;nonce)){\r\n&nbsp;&nbsp;&nbsp;out.print(echostr);\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;\r\n&nbsp;&nbsp;out.close();\r\n&nbsp;&nbsp;out&nbsp;=&nbsp;null;\r\n&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><strong>&nbsp;\u7b2c\u4e8c\u6b65\uff1a<\/strong>\u65b0\u5efa\u5305com.wtz.util\uff0c\u65b0\u5efa\u7c7bValidation.java<\/p>\n<pre>package&nbsp;com.wtz.util;\r\n\r\nimport&nbsp;java.security.MessageDigest;\r\nimport&nbsp;java.security.NoSuchAlgorithmException;\r\nimport&nbsp;java.util.Arrays;\r\n\r\n\/**\r\n&nbsp;*&nbsp;&nbsp;@author&nbsp;wangtianze&nbsp;QQ:864620012\r\n&nbsp;*&nbsp;@date&nbsp;2017\u5e744\u670817\u65e5&nbsp;\u4e0b\u53488:35:57\r\n&nbsp;*&nbsp;&lt;p&gt;version:1.0&lt;\/p&gt;\r\n&nbsp;*&nbsp;&nbsp;&lt;p&gt;description:\u5fae\u4fe1\u8bf7\u6c42\u6821\u9a8c\u5de5\u5177\u7c7b&lt;\/p&gt;\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;ValidationUtil&nbsp;{\r\n&nbsp;private&nbsp;static&nbsp;String&nbsp;token&nbsp;=&nbsp;\"wangtianze\";\r\n&nbsp;\r\n&nbsp;public&nbsp;static&nbsp;boolean&nbsp;checkSignature(String&nbsp;signature,String&nbsp;timestamp,String&nbsp;nonce){\r\n&nbsp;&nbsp;\/\/1.\u5c06token,timestamp,nonce\u4e09\u4e2a\u53c2\u6570\u8fdb\u884c\u6392\u5e8f\r\n&nbsp;&nbsp;String[]&nbsp;str&nbsp;=&nbsp;new&nbsp;String[]{token,timestamp,nonce};\r\n&nbsp;&nbsp;Arrays.sort(str);\r\n&nbsp;&nbsp;\r\n&nbsp;&nbsp;\/\/2.\u5c06\u4e09\u4e2a\u53c2\u6570\u5b57\u7b26\u4e32\u62fc\u63a5\u6210\u4e00\u4e2a\u5b57\u7b26\u4e32\r\n&nbsp;&nbsp;StringBuilder&nbsp;buff&nbsp;=&nbsp;new&nbsp;StringBuilder();\r\n&nbsp;&nbsp;for(int&nbsp;i=0;i&lt;buff.length&gt;&amp;gt;&amp;gt;4)&nbsp;&amp;amp;&nbsp;0X0F];\r\n&nbsp;&nbsp;temp[1]&nbsp;=&nbsp;digit[mByte&nbsp;&amp;amp;&nbsp;0X0F];\r\n&nbsp;&nbsp;\r\n&nbsp;&nbsp;String&nbsp;str&nbsp;=&nbsp;new&nbsp;String(temp);\r\n&nbsp;&nbsp;return&nbsp;str;\r\n&nbsp;}\r\n}&lt;\/buff.length&gt;<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u7b2c\u4e00\u5929\u5c31\u505a\u4e86\u8fd9\u4e9b\uff0c\u5b8c\u6210\u4e86\u5fae\u4fe1\u8bf7\u6c42\u9a8c\u8bc1\u7684\u529f\u80fd\u3002<\/p>\n<p>\u3010\u76f8\u5173\u63a8\u8350\u3011<\/p>\n<p>1. <\/p>\n<p>2. <\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u4e8c\u6b21\u5f00\u53d1\u5fae\u4fe1\u4e4b\u8bf7\u6c42\u9a8c\u8bc1\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4e3a\u5927\u5bb6\u8be6\u7ec6\u4ecb\u7ecd\u4e86java\u5fae\u4fe1\u4e8c\u6b21\u5f00\u53d1\u7b2c\u4e00\u7bc7\uff0cjava\u5fae\u4fe1\u8bf7\u6c42\u9a8c\u8bc1\u529f\u80fd\uff0c\u5177\u6709\u4e00\u5b9a\u7684\u53c2\u8003\u4ef7\u503c\uff0c\u611f\u5174\u8da3\u7684\u5c0f\u4f19\u4f34\u4eec\u53ef\u4ee5\u53c2\u8003\u4e00\u4e0b \u51c6\u5907\u7528Java\u505a\u4e00\u4e2a\u5fae\u4fe1\u4e8c\u6b21\u5f00\u53d1\u9879\u76ee\uff0c\u628a\u6d41\u7a0b\u5199\u5728\u8fd9\u91cc\u5427\u3002 \u7b2c\u4e00\u7bc7\uff0c\u505a\u5fae\u4fe1\u8bf7\u6c42\u9a8c\u8bc1 \u9700\u8981\u5bfc\u5165\u5e93\uff1aservlet-api.jar \u7b2c\u4e00\u6b65\uff1a\u65b0\u5efa\u5305com.wtz.service\uff0c\u65b0\u5efa\u7c7bLoginServlet.java package&nbsp;com.wtz.service; import&nbsp;java.io.IOException; import&nbsp;java.io.PrintWriter; import&nbsp;javax.servlet.ServletException; import&nbsp;javax.servlet.http.HttpServlet; import&nbsp;javax.servlet.http.HttpServletRequest; import&nbsp;javax.servlet.http.HttpServletResponse; import&nbsp;com.wtz.util.ValidationUtil; \/** &nbsp;*&nbsp;\u3000\u3000@author&nbsp;wangtianze&nbsp;QQ:864620012 &nbsp;*&nbsp;@date&nbsp;2017\u5e744\u670817\u65e5&nbsp;\u4e0b\u53488:11:32 &nbsp;*&nbsp;&lt;p&gt;version:1.0&lt;\/p&gt; &nbsp;*&nbsp;&nbsp;&lt;p&gt;description:\u5fae\u4fe1\u8bf7\u6c42\u9a8c\u8bc1\u7c7b&lt;\/p&gt; &nbsp;*\/ public&nbsp;class&nbsp;LoginServlet&nbsp;extends&nbsp;HttpServlet&nbsp;{ &nbsp;@Override &nbsp;protected&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response) &nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{ &nbsp;&nbsp;System.out.println(&#8220;get\u8bf7\u6c42\u3002\u3002\u3002\u3002\u3002\u3002&#8221;); &nbsp;&nbsp; &nbsp;&nbsp;\/\/1.\u83b7\u5f97\u5fae\u4fe1\u7b7e\u540d\u7684\u52a0\u5bc6\u5b57\u7b26\u4e32 &nbsp;&nbsp;String&nbsp;signature&nbsp;=&nbsp;request.getParameter(&#8220;signature&#8221;); &nbsp;&nbsp; &nbsp;&nbsp;\/\/2.\u83b7\u5f97\u65f6\u95f4\u6233\u4fe1\u606f &nbsp;&nbsp;String&nbsp;timestamp&nbsp;=&nbsp;request.getParameter(&#8220;timestamp&#8221;); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;\/\/3.\u83b7\u5f97\u968f\u673a\u6570 &nbsp;&nbsp;String&nbsp;nonce&nbsp;=&nbsp;request.getParameter(&#8220;nonce&#8221;); &nbsp;&nbsp; &nbsp;&nbsp;\/\/4.\u83b7\u5f97\u968f\u673a\u5b57\u7b26\u4e32 &nbsp;&nbsp;String&nbsp;echostr&nbsp;=&nbsp;request.getParameter(&#8220;echostr&#8221;); &nbsp;&nbsp; &nbsp;&nbsp;System.out.println(&#8220;\u83b7\u5f97\u5fae\u4fe1\u7b7e\u540d\u7684\u52a0\u5bc6\u5b57\u7b26\u4e32\uff1a&#8221;+signature); &nbsp;&nbsp;System.out.println(&#8220;\u83b7\u5f97\u65f6\u95f4\u6233\u4fe1\u606f\uff1a&#8221;+timestamp); &nbsp;&nbsp;System.out.println(&#8220;\u83b7\u5f97\u968f\u673a\u6570\uff1a&#8221;+nonce); &nbsp;&nbsp;System.out.println(&#8220;\u83b7\u5f97\u968f\u673a\u5b57\u7b26\u4e32\uff1a&#8221;+echostr); &nbsp;&nbsp; &nbsp;&nbsp;PrintWriter&nbsp;out&nbsp;=&nbsp;response.getWriter(); &nbsp;&nbsp; &nbsp;&nbsp;\/\/\u9a8c\u8bc1\u8bf7\u6c42\u786e\u8ba4\u6210\u529f\u539f\u6837\u8fd4\u56deechostr\u53c2\u6570\u5185\u5bb9\uff0c\u5219\u63a5\u5165\u751f\u6548\uff0c\u6210\u4e3a\u5f00\u53d1\u8005\u6210\u529f\uff0c\u5426\u5219\u5931\u8d25 &nbsp;&nbsp;if(ValidationUtil.checkSignature(signature,&nbsp;timestamp,&nbsp;nonce)){ &nbsp;&nbsp;&nbsp;out.print(echostr); &nbsp;&nbsp;} &nbsp;&nbsp; &nbsp;&nbsp;out.close(); &nbsp;&nbsp;out&nbsp;=&nbsp;null; &nbsp;} } \u767b\u5f55\u540e\u590d\u5236 &nbsp;\u7b2c\u4e8c\u6b65\uff1a\u65b0\u5efa\u5305com.wtz.util\uff0c\u65b0\u5efa\u7c7bValidation.java [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-28525","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/28525","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=28525"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/28525\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=28525"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=28525"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=28525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}