{"id":31878,"date":"2024-11-25T08:13:44","date_gmt":"2024-11-25T00:13:44","guid":{"rendered":"https:\/\/fwq.ai\/blog\/31878\/"},"modified":"2024-11-25T08:13:44","modified_gmt":"2024-11-25T00:13:44","slug":"%e5%85%b3%e4%ba%8e%e5%be%ae%e4%bf%a1%e5%b0%8f%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%94%a8%e6%88%b7%e6%95%b0%e6%8d%ae%e8%a7%a3%e5%af%86%e7%9a%84%e4%bb%8b%e7%bb%8d","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/31878\/","title":{"rendered":"\u5173\u4e8e\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u4e2d\u7528\u6237\u6570\u636e\u89e3\u5bc6\u7684\u4ecb\u7ecd"},"content":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4ecb\u7ecd\u4e86\u5fae\u4fe1\u5c0f\u7a0b\u5e8f \u7528\u6237\u6570\u636e\u89e3\u5bc6\u8be6\u7ec6\u4ecb\u7ecd\u7684\u76f8\u5173\u8d44\u6599,\u9700\u8981\u7684\u670b\u53cb\u53ef\u4ee5\u53c2\u8003\u4e0b<\/p>\n<p><strong>\u5fae\u4fe1\u5c0f\u7a0b\u5e8f \u7528\u6237\u6570\u636e\u89e3\u5bc6<\/strong><\/p>\n<p><strong>\u5b98\u65b9\u6307\u5f15\u56fe\uff1a<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/009\/7b691d0787ac15a46b57ec77de2ead96-0.png\" class=\"aligncenter\" title=\"\u5173\u4e8e\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u4e2d\u7528\u6237\u6570\u636e\u89e3\u5bc6\u7684\u4ecb\u7ecd\u63d2\u56fe\" alt=\"\u5173\u4e8e\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u4e2d\u7528\u6237\u6570\u636e\u89e3\u5bc6\u7684\u4ecb\u7ecd\u63d2\u56fe\" \/><\/p>\n<p>\u5f15\u5bfc\u56fe\u4e00\u6b65\u4e00\u6b65\u64cd\u4f5c<\/p>\n<p>1\u3001\u83b7\u53d6code<\/p>\n<\/p>\n<pre>onLoad:&nbsp;function&nbsp;(options)&nbsp;{\n&nbsp;&nbsp;\/\/&nbsp;\u9875\u9762\u521d\u59cb\u5316&nbsp;options\u4e3a\u9875\u9762\u8df3\u8f6c\u6240\u5e26\u6765\u7684\u53c2\u6570\n&nbsp;&nbsp;let&nbsp;that&nbsp;=&nbsp;this\n&nbsp;&nbsp;wx.login({\n&nbsp;&nbsp;&nbsp;success:&nbsp;function&nbsp;(res)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;success\n&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;code&nbsp;=&nbsp;res.code\n&nbsp;&nbsp;&nbsp;&nbsp;that.setData({&nbsp;code:&nbsp;code&nbsp;})\n&nbsp;&nbsp;&nbsp;&nbsp;wx.getUserInfo({\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success:&nbsp;function&nbsp;(res)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;success\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that.setData({&nbsp;userInfo:&nbsp;res.userInfo&nbsp;})\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that.setData({&nbsp;iv:&nbsp;res.iv&nbsp;})\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that.setData({&nbsp;encryptedData:&nbsp;res.encryptedData&nbsp;})\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that.get3rdSession()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;})\n&nbsp;&nbsp;&nbsp;}\n&nbsp;})\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>2\u3001\u53d1\u9001code\u5230\u7b2c\u4e09\u65b9\u670d\u52a1\u5668\uff0c\u83b7\u53d63rd_session<\/p>\n<\/p>\n<pre>get3rdSession:function(){\n&nbsp;&nbsp;let&nbsp;that&nbsp;=&nbsp;this\n&nbsp;&nbsp;wx.request({\n&nbsp;&nbsp;&nbsp;url:&nbsp;'https:\/\/localhost:8443\/get3rdSession',\n&nbsp;&nbsp;&nbsp;data:&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;code:&nbsp;this.data.code\n&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;method:&nbsp;'GET',&nbsp;\/\/&nbsp;OPTIONS,&nbsp;GET,&nbsp;HEAD,&nbsp;POST,&nbsp;PUT,&nbsp;DELETE,&nbsp;TRACE,&nbsp;CONNECT\n&nbsp;&nbsp;&nbsp;\/\/&nbsp;header:&nbsp;{},&nbsp;\/\/&nbsp;\u8bbe\u7f6e\u8bf7\u6c42\u7684&nbsp;header\n&nbsp;&nbsp;&nbsp;success:&nbsp;function&nbsp;(res)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;success\n&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;sessionId&nbsp;=&nbsp;res.data.session;\n&nbsp;&nbsp;&nbsp;&nbsp;that.setData({&nbsp;sessionId:&nbsp;sessionId&nbsp;})\n&nbsp;&nbsp;&nbsp;&nbsp;wx.setStorageSync('sessionId',&nbsp;sessionId)\n&nbsp;&nbsp;&nbsp;&nbsp;that.decodeUserInfo()\n&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;})\n&nbsp;}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>3\u3001\u5728\u7b2c\u4e09\u65b9\u670d\u52a1\u5668\u4e0a\u53d1\u9001appid\u3001appsecret\u3001code\u5230\u5fae\u4fe1\u670d\u52a1\u5668\u6362\u53d6session_key\u548copenid<\/p>\n<p>\u8fd9\u91cc\u4f7f\u7528JFinal\u642d\u5efa\u7684\u670d\u52a1\u5668<\/p>\n<p>Redis\u914d\u7f6e<\/p>\n<\/p>\n<pre>public&nbsp;void&nbsp;configPlugin(Plugins&nbsp;me)&nbsp;{\n&nbsp;&nbsp;\/\/\u7528\u4e8e\u7f13\u5b58userinfo\u6a21\u5757\u7684redis\u670d\u52a1\n&nbsp;&nbsp;RedisPlugin&nbsp;userInfoRedis&nbsp;=&nbsp;new&nbsp;RedisPlugin(\"userInfo\",\"localhost\");\n&nbsp;&nbsp;me.add(userInfoRedis);\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u83b7\u53d6\u7b2c\u4e09\u65b9session<\/p>\n<\/p>\n<pre>public&nbsp;void&nbsp;get3rdSession()&nbsp;{\n&nbsp;&nbsp;\/\/\u83b7\u53d6\u540d\u4e3auserInfo\u7684Redis&nbsp;Cache\u5bf9\u8c61\n&nbsp;&nbsp;Cache&nbsp;userInfoCache&nbsp;=&nbsp;Redis.use(\"userInfo\");\n&nbsp;&nbsp;String&nbsp;sessionId&nbsp;=&nbsp;\"\";\n&nbsp;&nbsp;JSONObject&nbsp;json&nbsp;=&nbsp;new&nbsp;JSONObject();\n&nbsp;&nbsp;String&nbsp;code&nbsp;=&nbsp;getPara(\"code\");\n&nbsp;&nbsp;String&nbsp;url&nbsp;=&nbsp;\"https:\/\/api.weixin.qq.com\/sns\/jscode2session?appid=wx7560b8008e2c445d&amp;amp;secret=f1af3312b7038513fd17dd9cbc3b357c&amp;amp;js_code=\"&nbsp;+&nbsp;code&nbsp;+&nbsp;\"&amp;amp;grant_type=authorization_code\";\n&nbsp;&nbsp;\/\/\u6267\u884c\u547d\u4ee4\u751f\u62103rd_session\n&nbsp;&nbsp;String&nbsp;session&nbsp;=&nbsp;ExecLinuxCMDUtil.instance.exec(\"cat&nbsp;\/dev\/urandom&nbsp;|od&nbsp;-x&nbsp;|&nbsp;tr&nbsp;-d&nbsp;'&nbsp;'|&nbsp;head&nbsp;-n&nbsp;1\").toString();\n&nbsp;&nbsp;json.put(\"session\",&nbsp;session);\n&nbsp;&nbsp;\/\/\u521b\u5efa\u9ed8\u8ba4\u7684httpClient\u5b9e\u4f8b\n&nbsp;&nbsp;CloseableHttpClient&nbsp;httpClient&nbsp;=&nbsp;getHttpClient();\n&nbsp;&nbsp;try&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u7528get\u65b9\u6cd5\u53d1\u9001http\u8bf7\u6c42\n&nbsp;&nbsp;&nbsp;&nbsp;HttpGet&nbsp;get&nbsp;=&nbsp;new&nbsp;HttpGet(url);\n&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(\"\u6267\u884cget\u8bf7\u6c42:....\"&nbsp;+&nbsp;get.getURI());\n&nbsp;&nbsp;&nbsp;&nbsp;CloseableHttpResponse&nbsp;httpResponse&nbsp;=&nbsp;null;\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u53d1\u9001get\u8bf7\u6c42\n&nbsp;&nbsp;&nbsp;&nbsp;httpResponse&nbsp;=&nbsp;httpClient.execute(get);\n&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/response\u5b9e\u4f53\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpEntity&nbsp;entity&nbsp;=&nbsp;httpResponse.getEntity();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(null&nbsp;!=&nbsp;entity)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;=&nbsp;EntityUtils.toString(entity);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSONObject&nbsp;resultJson&nbsp;=&nbsp;JSONObject.fromObject(result);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;session_key&nbsp;=&nbsp;resultJson.getString(\"session_key\");\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;openid&nbsp;=&nbsp;resultJson.getString(\"openid\");\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/session\u5b58\u50a8\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userInfoCache.set(session,session_key+\",\"+openid);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpResponse.close();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closeHttpClient(httpClient);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;renderJson(json);\n}\nprivate&nbsp;CloseableHttpClient&nbsp;getHttpClient()&nbsp;{\n&nbsp;&nbsp;return&nbsp;HttpClients.createDefault();\n}\n\nprivate&nbsp;void&nbsp;closeHttpClient(CloseableHttpClient&nbsp;client)&nbsp;throws&nbsp;IOException&nbsp;{\n&nbsp;&nbsp;if&nbsp;(client&nbsp;!=&nbsp;null)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;client.close();\n&nbsp;&nbsp;}\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>ExecLinuxCMDUtil.Java<\/p>\n<\/p>\n<pre>import&nbsp;java.io.InputStreamReader;\nimport&nbsp;java.io.LineNumberReader;\n\n\/**\n&nbsp;*&nbsp;java\u5728linux\u73af\u5883\u4e0b\u6267\u884clinux\u547d\u4ee4\uff0c\u7136\u540e\u8fd4\u56de\u547d\u4ee4\u8fd4\u56de\u503c\u3002\n&nbsp;*&nbsp;Created&nbsp;by&nbsp;LJaer&nbsp;on&nbsp;16\/12\/22.\n&nbsp;*\/\npublic&nbsp;class&nbsp;ExecLinuxCMDUtil&nbsp;{\n&nbsp;&nbsp;public&nbsp;static&nbsp;final&nbsp;ExecLinuxCMDUtil&nbsp;instance&nbsp;=&nbsp;new&nbsp;ExecLinuxCMDUtil();\n\n&nbsp;&nbsp;public&nbsp;static&nbsp;Object&nbsp;exec(String&nbsp;cmd)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;cmdA&nbsp;=&nbsp;{&nbsp;\"\/bin\/sh\",&nbsp;\"-c\",&nbsp;cmd&nbsp;};\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process&nbsp;process&nbsp;=&nbsp;Runtime.getRuntime().exec(cmdA);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LineNumberReader&nbsp;br&nbsp;=&nbsp;new&nbsp;LineNumberReader(new&nbsp;InputStreamReader(\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process.getInputStream()));\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuffer();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;line;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((line&nbsp;=&nbsp;br.readLine())&nbsp;!=&nbsp;null)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(line);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(line).append(\"\n\");\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sb.toString();\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\n&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;\n&nbsp;&nbsp;}\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>4\u3001\u89e3\u5bc6\u7528\u6237\u6570\u636e<\/p>\n<\/p>\n<pre>decodeUserInfo:function(){\n&nbsp;&nbsp;let&nbsp;that&nbsp;=&nbsp;this\n&nbsp;&nbsp;wx.request({\n&nbsp;&nbsp;&nbsp;url:&nbsp;'https:\/\/localhost:8443\/decodeUserInfo',\n&nbsp;&nbsp;&nbsp;data:&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;encryptedData:&nbsp;that.data.encryptedData,\n&nbsp;&nbsp;&nbsp;&nbsp;iv:&nbsp;that.data.iv,\n&nbsp;&nbsp;&nbsp;&nbsp;session:&nbsp;wx.getStorageSync('sessionId')\n&nbsp;&nbsp;&nbsp;},\n&nbsp;&nbsp;&nbsp;method:&nbsp;'GET',&nbsp;\/\/&nbsp;OPTIONS,&nbsp;GET,&nbsp;HEAD,&nbsp;POST,&nbsp;PUT,&nbsp;DELETE,&nbsp;TRACE,&nbsp;CONNECT\n&nbsp;&nbsp;&nbsp;\/\/&nbsp;header:&nbsp;{},&nbsp;\/\/&nbsp;\u8bbe\u7f6e\u8bf7\u6c42\u7684&nbsp;header\n&nbsp;&nbsp;&nbsp;success:&nbsp;function&nbsp;(res)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;success\n&nbsp;&nbsp;&nbsp;&nbsp;console.log(res)\n&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;})\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>console\u8f93\u51fa\u7ed3\u679c\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/000\/000\/009\/4e1cc0dbfaf08820ec189cfbc216b97e-1.png\" class=\"aligncenter\" title=\"\u5173\u4e8e\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u4e2d\u7528\u6237\u6570\u636e\u89e3\u5bc6\u7684\u4ecb\u7ecd\u63d2\u56fe1\" alt=\"\u5173\u4e8e\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u4e2d\u7528\u6237\u6570\u636e\u89e3\u5bc6\u7684\u4ecb\u7ecd\u63d2\u56fe1\" \/><\/p>\n<p>\u540e\u7aef\u89e3\u5bc6\u4ee3\u7801<\/p>\n<\/p>\n<pre>\/**\n&nbsp;*&nbsp;\u89e3\u5bc6\u7528\u6237\u654f\u611f\u6570\u636e\n&nbsp;*\/\npublic&nbsp;void&nbsp;decodeUserInfo(){\n&nbsp;&nbsp;String&nbsp;encryptedData&nbsp;=&nbsp;getPara(\"encryptedData\");\n&nbsp;&nbsp;String&nbsp;iv&nbsp;=&nbsp;getPara(\"iv\");\n&nbsp;&nbsp;String&nbsp;session&nbsp;=&nbsp;getPara(\"session\");\n&nbsp;&nbsp;\/\/\u4ece\u7f13\u5b58\u4e2d\u83b7\u53d6session_key\n&nbsp;&nbsp;\/\/\u83b7\u53d6\u540d\u79f0\u4e3auserInfo\u7684Redis&nbsp;Cache\u5bf9\u8c61\n&nbsp;&nbsp;Cache&nbsp;userInfoRedis&nbsp;=&nbsp;Redis.use(\"userInfo\");\n&nbsp;&nbsp;Object&nbsp;wxSessionObj&nbsp;=&nbsp;userInfoRedis.get(session);\n&nbsp;&nbsp;if(null==wxSessionObj){\n&nbsp;&nbsp;&nbsp;&nbsp;renderNull();\n&nbsp;&nbsp;}\n&nbsp;&nbsp;String&nbsp;wxSessionStr&nbsp;=&nbsp;(String)wxSessionObj;\n&nbsp;&nbsp;String&nbsp;session_key&nbsp;=&nbsp;wxSessionStr.split(\",\")[0];\n\n\n&nbsp;&nbsp;try&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;resultByte&nbsp;=&nbsp;AESUtil.instance.decrypt(Base64.decodeBase64(encryptedData),&nbsp;Base64.decodeBase64(session_key),&nbsp;Base64.decodeBase64(iv));\n&nbsp;&nbsp;&nbsp;&nbsp;if(null&nbsp;!=&nbsp;resultByte&nbsp;&amp;amp;&amp;amp;&nbsp;resultByte.length&nbsp;&amp;gt;&nbsp;0){\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;userInfo&nbsp;=&nbsp;new&nbsp;String(resultByte,&nbsp;\"UTF-8\");\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(userInfo);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSONObject&nbsp;json&nbsp;=&nbsp;JSONObject.fromObject(userInfo);&nbsp;\/\/\u5c06\u5b57\u7b26\u4e32{\u201cid\u201d\uff1a1}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;renderJson(json);\n&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;}&nbsp;catch&nbsp;(InvalidAlgorithmParameterException&nbsp;e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\n&nbsp;&nbsp;}&nbsp;catch&nbsp;(UnsupportedEncodingException&nbsp;e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\n&nbsp;&nbsp;}\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>AESUtil.java<\/p>\n<\/p>\n<pre>import&nbsp;org.bouncycastle.jce.provider.BouncyCastleProvider;\n\nimport&nbsp;javax.crypto.BadPaddingException;\nimport&nbsp;javax.crypto.Cipher;\nimport&nbsp;javax.crypto.IllegalBlockSizeException;\nimport&nbsp;javax.crypto.NoSuchPaddingException;\nimport&nbsp;javax.crypto.spec.IvParameterSpec;\nimport&nbsp;javax.crypto.spec.SecretKeySpec;\nimport&nbsp;java.security.*;\n\npublic&nbsp;class&nbsp;AESUtil&nbsp;{\n&nbsp;&nbsp;public&nbsp;static&nbsp;final&nbsp;AESUtil&nbsp;instance&nbsp;=&nbsp;new&nbsp;AESUtil();\n\n&nbsp;&nbsp;public&nbsp;static&nbsp;boolean&nbsp;initialized&nbsp;=&nbsp;false;\n\n&nbsp;&nbsp;\/**\n&nbsp;&nbsp;&nbsp;*&nbsp;AES\u89e3\u5bc6\n&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;content&nbsp;\u5bc6\u6587\n&nbsp;&nbsp;&nbsp;*&nbsp;@return\n&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;InvalidAlgorithmParameterException\n&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;NoSuchProviderException\n&nbsp;&nbsp;&nbsp;*\/\n&nbsp;&nbsp;public&nbsp;byte[]&nbsp;decrypt(byte[]&nbsp;content,&nbsp;byte[]&nbsp;keyByte,&nbsp;byte[]&nbsp;ivByte)&nbsp;throws&nbsp;InvalidAlgorithmParameterException&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;initialize();\n&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cipher&nbsp;cipher&nbsp;=&nbsp;Cipher.getInstance(\"AES\/CBC\/PKCS7Padding\");\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Key&nbsp;sKeySpec&nbsp;=&nbsp;new&nbsp;SecretKeySpec(keyByte,&nbsp;\"AES\");\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cipher.init(Cipher.DECRYPT_MODE,&nbsp;sKeySpec,&nbsp;generateIV(ivByte));\/\/&nbsp;\u521d\u59cb\u5316\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;result&nbsp;=&nbsp;cipher.doFinal(content);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(NoSuchAlgorithmException&nbsp;e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(NoSuchPaddingException&nbsp;e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(InvalidKeyException&nbsp;e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IllegalBlockSizeException&nbsp;e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(BadPaddingException&nbsp;e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(NoSuchProviderException&nbsp;e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\n&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;\n&nbsp;&nbsp;}\n\n&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;initialize(){\n&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(initialized)&nbsp;return;\n&nbsp;&nbsp;&nbsp;&nbsp;Security.addProvider(new&nbsp;BouncyCastleProvider());\n&nbsp;&nbsp;&nbsp;&nbsp;initialized&nbsp;=&nbsp;true;\n&nbsp;&nbsp;}\n&nbsp;&nbsp;\/\/\u751f\u6210iv\n&nbsp;&nbsp;public&nbsp;static&nbsp;AlgorithmParameters&nbsp;generateIV(byte[]&nbsp;iv)&nbsp;throws&nbsp;Exception{\n&nbsp;&nbsp;&nbsp;&nbsp;AlgorithmParameters&nbsp;params&nbsp;=&nbsp;AlgorithmParameters.getInstance(\"AES\");\n&nbsp;&nbsp;&nbsp;&nbsp;params.init(new&nbsp;IvParameterSpec(iv));\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;params;\n&nbsp;&nbsp;}\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u672c\u6587\u7684\u5168\u90e8\u5185\u5bb9\uff0c\u5e0c\u671b\u5bf9\u5927\u5bb6\u7684\u5b66\u4e60\u6709\u6240\u5e2e\u52a9\uff0c\u66f4\u591a\u76f8\u5173\u5185\u5bb9\u8bf7\u5173\u6ce8PHP\u4e2d\u6587\u7f51\uff01<\/p>\n<p>\u76f8\u5173\u63a8\u8350\uff1a<\/p>\n<p><\/p>\n<p><\/p>\n<p><\/p>\n<\/p>\n<p><span><\/span><\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u5173\u4e8e\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u4e2d\u7528\u6237\u6570\u636e\u89e3\u5bc6\u7684\u4ecb\u7ecd\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\u4ecb\u7ecd\u4e86\u5fae\u4fe1\u5c0f\u7a0b\u5e8f \u7528\u6237\u6570\u636e\u89e3\u5bc6\u8be6\u7ec6\u4ecb\u7ecd\u7684\u76f8\u5173\u8d44\u6599,\u9700\u8981\u7684\u670b\u53cb\u53ef\u4ee5\u53c2\u8003\u4e0b \u5fae\u4fe1\u5c0f\u7a0b\u5e8f \u7528\u6237\u6570\u636e\u89e3\u5bc6 \u5b98\u65b9\u6307\u5f15\u56fe\uff1a \u5f15\u5bfc\u56fe\u4e00\u6b65\u4e00\u6b65\u64cd\u4f5c 1\u3001\u83b7\u53d6code onLoad:&nbsp;function&nbsp;(options)&nbsp;{ &nbsp;&nbsp;\/\/&nbsp;\u9875\u9762\u521d\u59cb\u5316&nbsp;options\u4e3a\u9875\u9762\u8df3\u8f6c\u6240\u5e26\u6765\u7684\u53c2\u6570 &nbsp;&nbsp;let&nbsp;that&nbsp;=&nbsp;this &nbsp;&nbsp;wx.login({ &nbsp;&nbsp;&nbsp;success:&nbsp;function&nbsp;(res)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;success &nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;code&nbsp;=&nbsp;res.code &nbsp;&nbsp;&nbsp;&nbsp;that.setData({&nbsp;code:&nbsp;code&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;wx.getUserInfo({ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success:&nbsp;function&nbsp;(res)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;success &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that.setData({&nbsp;userInfo:&nbsp;res.userInfo&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that.setData({&nbsp;iv:&nbsp;res.iv&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that.setData({&nbsp;encryptedData:&nbsp;res.encryptedData&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that.get3rdSession() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}) &nbsp;&nbsp;&nbsp;} &nbsp;}) } \u767b\u5f55\u540e\u590d\u5236 2\u3001\u53d1\u9001code\u5230\u7b2c\u4e09\u65b9\u670d\u52a1\u5668\uff0c\u83b7\u53d63rd_session get3rdSession:function(){ &nbsp;&nbsp;let&nbsp;that&nbsp;=&nbsp;this &nbsp;&nbsp;wx.request({ &nbsp;&nbsp;&nbsp;url:&nbsp;&#8216;https:\/\/localhost:8443\/get3rdSession&#8217;, &nbsp;&nbsp;&nbsp;data:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;code:&nbsp;this.data.code &nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;&nbsp;method:&nbsp;&#8216;GET&#8217;,&nbsp;\/\/&nbsp;OPTIONS,&nbsp;GET,&nbsp;HEAD,&nbsp;POST,&nbsp;PUT,&nbsp;DELETE,&nbsp;TRACE,&nbsp;CONNECT &nbsp;&nbsp;&nbsp;\/\/&nbsp;header:&nbsp;{},&nbsp;\/\/&nbsp;\u8bbe\u7f6e\u8bf7\u6c42\u7684&nbsp;header &nbsp;&nbsp;&nbsp;success:&nbsp;function&nbsp;(res)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;success &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;sessionId&nbsp;=&nbsp;res.data.session; &nbsp;&nbsp;&nbsp;&nbsp;that.setData({&nbsp;sessionId:&nbsp;sessionId&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;wx.setStorageSync(&#8216;sessionId&#8217;,&nbsp;sessionId) &nbsp;&nbsp;&nbsp;&nbsp;that.decodeUserInfo() &nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;}) &nbsp;} \u767b\u5f55\u540e\u590d\u5236 3\u3001\u5728\u7b2c\u4e09\u65b9\u670d\u52a1\u5668\u4e0a\u53d1\u9001appid\u3001appsecret\u3001code\u5230\u5fae\u4fe1\u670d\u52a1\u5668\u6362\u53d6session_key\u548copenid \u8fd9\u91cc\u4f7f\u7528JFinal\u642d\u5efa\u7684\u670d\u52a1\u5668 Redis\u914d\u7f6e public&nbsp;void&nbsp;configPlugin(Plugins&nbsp;me)&nbsp;{ &nbsp;&nbsp;\/\/\u7528\u4e8e\u7f13\u5b58userinfo\u6a21\u5757\u7684redis\u670d\u52a1 &nbsp;&nbsp;RedisPlugin&nbsp;userInfoRedis&nbsp;=&nbsp;new&nbsp;RedisPlugin(&#8220;userInfo&#8221;,&#8221;localhost&#8221;); &nbsp;&nbsp;me.add(userInfoRedis); [&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-31878","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/31878","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=31878"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/31878\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=31878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=31878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=31878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}