国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
簡介" >簡介
簽名算法" >簽名算法
簽名過程示例" >簽名過程示例
簽名算法實現(xiàn)代碼" >簽名算法實現(xiàn)代碼
PHP代碼實現(xiàn)" >PHP代碼實現(xiàn)
Java代碼實現(xiàn)" >Java代碼實現(xiàn)
C#代碼實現(xiàn)" >C#代碼實現(xiàn)
首頁 后端開發(fā) php教程 PHP、Java、C#實現(xiàn)URI參數(shù)簽名算法,保準應(yīng)用與REST服務(wù)器之間的安全通信,防止Secret Key盜用、數(shù)據(jù)篡改等惡意攻擊行為

PHP、Java、C#實現(xiàn)URI參數(shù)簽名算法,保準應(yīng)用與REST服務(wù)器之間的安全通信,防止Secret Key盜用、數(shù)據(jù)篡改等惡意攻擊行為

Jun 13, 2016 pm 12:10 PM
key session string

PHP、Java、C#實現(xiàn)URI參數(shù)簽名算法,確保應(yīng)用與REST服務(wù)器之間的安全通信,防止Secret Key盜用、數(shù)據(jù)篡改等惡意攻擊行為

簡介

應(yīng)用基于HTTP POST或HTTP GET請求發(fā)送Open API調(diào)用請求時,為了確保應(yīng)用與REST服務(wù)器之間的安全通信,防止Secret Key盜用、數(shù)據(jù)篡改等惡意攻擊行為,REST服務(wù)器使用了參數(shù)簽名機制。應(yīng)用在調(diào)用Open API之前,需要為其所有請求參數(shù)計算一個MD5簽名,并追加到請求參數(shù)中,參數(shù)名為“sign”。REST服務(wù)器在接收到請求時會重新計算簽名,并判斷其值是否與應(yīng)用傳遞過來的sign參數(shù)值一致,以此判定當(dāng)前Open API調(diào)用請求是否是被第三者偽造或篡改。

應(yīng)用在調(diào)用Open API之前需要通過?OAuth2.0服務(wù)獲得用戶或平臺的授權(quán),獲取到授權(quán)后將會拿到以下3個重要參數(shù):

  • access_token:基于https調(diào)用Open API時所需要的訪問授權(quán)碼;
  • session_key:基于http調(diào)用Open API時所需要的訪問授權(quán)碼;
  • session_secret:基于http調(diào)用Open API時計算參數(shù)簽名用的簽名密鑰。

其中,session_secret這個參數(shù)就是做參數(shù)簽名時所需要的簽名密鑰。這與Facebook、人人網(wǎng)等平臺稍微有所區(qū)別,這兩個平臺在做參數(shù)簽名時所用的簽名密鑰一般有2個:

  • 如果是通過應(yīng)用服務(wù)端調(diào)用Open API,則注冊應(yīng)用時所拿到的應(yīng)用密鑰(即API Key)就是參數(shù)簽名密鑰;
  • 如果是通過JavaScript、ActionScript等客戶端語言調(diào)用Open API,則應(yīng)用獲取到用戶授權(quán)后所拿到的Session Secret就是參數(shù)簽名密鑰。當(dāng)然,通過服務(wù)端調(diào)用Open API時也可以用Session Secret作為簽名密鑰。

簽名算法

假設(shè)參與參數(shù)簽名計算的請求參數(shù)分別是“k1”、“k2”、“k3”,它們的值分別是“v1”、“v2”、“v3”,則參數(shù)簽名計算方法如下:

  • 將請求參數(shù)格式化為“key=value”格式,即“k1=v1”、“k2=v2”、“k3=v3”;
  • 將格式化好的參數(shù)鍵值對以字典序升序排列后,拼接在一起,即“k1=v1k2=v2k3=v3”;
  • 在拼接好的字符串末尾追加上應(yīng)用通過OAuth2.0協(xié)議獲取Access Token時所獲取到的session_secret參數(shù)值;
  • 上述字符串的MD5值即為簽名的值。

注意:計算簽名時的請求參數(shù)中不要包含sign(簽名)參數(shù),因為sign參數(shù)的值此時還不知道,有待計算。

另外,計算簽名的時候不需要對參數(shù)進行urlencode處理(“application/x-www-form-urlencoded”編碼),但是發(fā)送請求的時候需要進行urlencode處理,這是很多開發(fā)者最容易犯錯的地方。

簽名過程示例

假設(shè)某個應(yīng)用需要獲取某個uid為67411167的用戶的基本資料,應(yīng)用在之前的通過OAuth2.0服務(wù)獲取Access Token的過程中所拿到的session_key和session_secret參數(shù)值分別為:

  • session_key:?"9XNNXe66zOlSassjSKD5gry9BiN61IUEi8IpJmjBwvU07RXP0J3c4GnhZR3GKhMHa1A="
  • session_secret:?"27e1be4fdcaa83d7f61c489994ff6ed6"

調(diào)用Open API時的系統(tǒng)時間(PHP中可以通過date('Y-m-d H:i:s')來獲取當(dāng)前系統(tǒng)時間)為"2011-06-21 17:18:09",希望REST服務(wù)器以JSON格式返回調(diào)用結(jié)果,即相當(dāng)于參與參數(shù)簽名計算的請求參數(shù)集合為:

<span style="color: #000000;">[    </span>"session_key" => "9XNNXe66zOlSassjSKD5gry9BiN61IUEi8IpJmjBwvU07RXP0J3c4GnhZR3GKhMHa1A="<span style="color: #000000;">,    </span>"timestamp" => "2011-06-21 17:18:09"<span style="color: #000000;">,    </span>"format" => "json"<span style="color: #000000;">,    </span>"uid" => 67411167<span style="color: #000000;">]</span>

 

則計算簽名的具體過程如下:

  • 將請求參數(shù)格式化為“key=value”格式,格式化后的請求參數(shù)集合為:
<span style="color: #000000;"> [    </span>"session_key=9XNNXe66zOlSassjSKD5gry9BiN61IUEi8IpJmjBwvU07RXP0J3c4GnhZR3GKhMHa1A="<span style="color: #000000;">,    </span>"timestamp=2011-06-21 17:18:09"<span style="color: #000000;">,    </span>"format=json"<span style="color: #000000;">,    </span>"uid=67411167"<span style="color: #000000;"> ]</span>

 
  • 將格式化好的參數(shù)鍵值對以字典序升序排列,得到如下參數(shù)集:
<span style="color: #000000;"> [    </span>"format=json"<span style="color: #000000;">,    </span>"session_key=9XNNXe66zOlSassjSKD5gry9BiN61IUEi8IpJmjBwvU07RXP0J3c4GnhZR3GKhMHa1A="<span style="color: #000000;">,    </span>"timestamp=2011-06-21 17:18:09"<span style="color: #000000;">,    </span>"uid=67411167"<span style="color: #000000;"> ]</span>

 
  • 將前面排序好的參數(shù)集拼接在一起,得到如下字符串:
format<span style="color: #339933;">=</span>jsonsession_key<span style="color: #339933;">=</span>9XNNXe66zOlSassjSKD5gry9BiN61IUEi8IpJmjBwvU07RXP0J3c4GnhZR3GKhMHa1A<span style="color: #339933;">=</span>timestamp<span style="color: #339933;">=</span><span style="color: #cc66cc;">2011</span><span style="color: #339933;">-</span><span style="color: #208080;">06</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">21</span> <span style="color: #cc66cc;">17</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">18</span><span style="color: #339933;">:</span>09uid<span style="color: #339933;">=</span><span style="color: #cc66cc;">67411167</span>
  • 在拼接好的字符串末尾追加上應(yīng)用通過OAuth2.0協(xié)議獲取Access Token時所獲取到的session_secret參數(shù)值,得到如下字符串:
format<span style="color: #339933;">=</span>jsonsession_key<span style="color: #339933;">=</span>9XNNXe66zOlSassjSKD5gry9BiN61IUEi8IpJmjBwvU07RXP0J3c4GnhZR3GKhMHa1A<span style="color: #339933;">=</span>timestamp<span style="color: #339933;">=</span><span style="color: #cc66cc;">2011</span><span style="color: #339933;">-</span><span style="color: #208080;">06</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">21</span> <span style="color: #cc66cc;">17</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">18</span><span style="color: #339933;">:</span>09uid<span style="color: #339933;">=</span>6741116727e1be4fdcaa83d7f61c489994ff6ed6
  • 對前面得到的字符串求MD5簽名,得到的d24dd357a95a2579c410b3a92495f009就是調(diào)用API時所需要的sign參數(shù)值。

接下來便可以通過HTTP POST方法或HTTP GET方法請求Open API的REST服務(wù)器,進行接口調(diào)用了,如:

GET /rest/2.0/passport/users/getInfo?session_key=9XNNXe66zOlSassjSKD5gry9BiN61IUEi8IpJmjBwvU07RXP0J3c4GnhZR3GKhMHa1A%3D&timestamp=2011-06-21+17%3A18%3A09&format=json&uid=67411167&sign=d24dd357a95a2579c410b3a92495f009 HTTP/1.1<span style="color: #000000;">Host: openapi.baidu.comUser</span>-<span style="color: #000000;">Agent: Client of Baidu Open PlatformAccept: </span>*<span style="color: #008000;">/*</span><span style="color: #008000;">Accept-Encoding: gzip,deflateAccept-Charset: utf-8Connection: close或POST /rest/2.0/passport/users/getInfo HTTP/1.1Host: openapi.baidu.comUser-Agent: Client of Baidu Open PlatformAccept: </span><span style="color: #008000;">*/</span>*<span style="color: #000000;">Accept</span>-<span style="color: #000000;">Encoding: gzip,deflateAccept</span>-Charset: utf-8<span style="color: #000000;">Content</span>-Length: 179<span style="color: #000000;">Connection: close session_key</span>=9XNNXe66zOlSassjSKD5gry9BiN61IUEi8IpJmjBwvU07RXP0J3c4GnhZR3GKhMHa1A%3D&timestamp=2011-06-21+17%3A18%3A09&format=json&uid=67411167&sign=d24dd357a95a2579c410b3a92495f009

簽名算法實現(xiàn)代碼

PHP代碼實現(xiàn)

獲取簽名的PHP代碼實現(xiàn)方式如下所示:

<span style="color: #008000;">/*</span><span style="color: #008000;">*  * 簽名生成算法  * @param  array  $params API調(diào)用的請求參數(shù)集合的關(guān)聯(lián)數(shù)組,不包含sign參數(shù)  * @param  string $secret 簽名的密鑰即獲取access token時返回的session secret  * @return string 返回參數(shù)簽名值  </span><span style="color: #008000;">*/</span> <span style="color: #0000ff;">function</span> getSignature(<span style="color: #800080;">$params</span>, <span style="color: #800080;">$secret</span><span style="color: #000000;">) {    </span><span style="color: #800080;">$str</span> = '';  <span style="color: #008000;">//</span><span style="color: #008000;">待簽名字符串    //先將參數(shù)以其參數(shù)名的字典序升序進行排序</span>    <span style="color: #008080;">ksort</span>(<span style="color: #800080;">$params</span><span style="color: #000000;">);    </span><span style="color: #008000;">//</span><span style="color: #008000;">遍歷排序后的參數(shù)數(shù)組中的每一個key/value對</span>    <span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$params</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$k</span> => <span style="color: #800080;">$v</span><span style="color: #000000;">) {        </span><span style="color: #008000;">//</span><span style="color: #008000;">為key/value對生成一個key=value格式的字符串,并拼接到待簽名字符串后面</span>        <span style="color: #800080;">$str</span> .= "<span style="color: #800080;">$k</span>=<span style="color: #800080;">$v</span>"<span style="color: #000000;">;    }    </span><span style="color: #008000;">//</span><span style="color: #008000;">將簽名密鑰拼接到簽名字符串最后面</span>    <span style="color: #800080;">$str</span> .= <span style="color: #800080;">$secret</span><span style="color: #000000;">;    </span><span style="color: #008000;">//</span><span style="color: #008000;">通過md5算法為簽名字符串生成一個md5簽名,該簽名就是我們要追加的sign參數(shù)值</span>    <span style="color: #0000ff;">return</span> <span style="color: #008080;">md5</span>(<span style="color: #800080;">$str</span><span style="color: #000000;">); }</span>

調(diào)用示例:

<span style="color: #800080;">$uid</span> = 67411167<span style="color: #000000;">;</span><span style="color: #800080;">$params</span> = <span style="color: #0000ff;">array</span><span style="color: #000000;">(    </span>"session_key" => "9XNNXe66zOlSassjSKD5gry9BiN61IUEi8IpJmjBwvU07RXP0J3c4GnhZR3GKhMHa1A=",    "timestamp" => "2011-06-21 17:18:09",    "format" => "json",    "uid" => <span style="color: #800080;">$uid</span>,<span style="color: #000000;">);</span><span style="color: #800080;">$sign</span> = getSignature(<span style="color: #800080;">$params</span>, "27e1be4fdcaa83d7f61c489994ff6ed6");

 

Java代碼實現(xiàn)

獲取簽名的java代碼實現(xiàn)方式如下所示:

<span style="color: #008000;">/**</span><span style="color: #008000;"> * 簽名生成算法 * </span><span style="color: #808080;">@param</span><span style="color: #008000;"> HashMap<String,String> params 請求參數(shù)集,所有參數(shù)必須已轉(zhuǎn)換為字符串類型 * </span><span style="color: #808080;">@param</span><span style="color: #008000;"> String secret 簽名密鑰 * </span><span style="color: #808080;">@return</span><span style="color: #008000;"> 簽名 * </span><span style="color: #808080;">@throws</span><span style="color: #008000;"> IOException </span><span style="color: #008000;">*/</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> String getSignature(HashMap<String,String> params, String secret) <span style="color: #0000ff;">throws</span><span style="color: #000000;"> IOException{    </span><span style="color: #008000;">//</span><span style="color: #008000;"> 先將參數(shù)以其參數(shù)名的字典序升序進行排序</span>    Map<String, String> sortedParams = <span style="color: #0000ff;">new</span> TreeMap<String, String><span style="color: #000000;">(params);    Set</span><Entry<String, String>> entrys =<span style="color: #000000;"> sortedParams.entrySet();     </span><span style="color: #008000;">//</span><span style="color: #008000;"> 遍歷排序后的字典,將所有參數(shù)按"key=value"格式拼接在一起</span>    StringBuilder basestring = <span style="color: #0000ff;">new</span><span style="color: #000000;"> StringBuilder();    </span><span style="color: #0000ff;">for</span> (Entry<String, String><span style="color: #000000;"> param : entrys) {        basestring.append(param.getKey()).append(</span>"="<span style="color: #000000;">).append(param.getValue());    }    basestring.append(secret);     </span><span style="color: #008000;">//</span><span style="color: #008000;"> 使用MD5對待簽名串求簽</span>    <span style="color: #0000ff;">byte</span>[] bytes = <span style="color: #0000ff;">null</span><span style="color: #000000;">;    </span><span style="color: #0000ff;">try</span><span style="color: #000000;"> {        MessageDigest md5 </span>= MessageDigest.getInstance("MD5"<span style="color: #000000;">);        bytes </span>= md5.digest(basestring.toString().getBytes("UTF-8"<span style="color: #000000;">));    } </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (GeneralSecurityException ex) {        </span><span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span><span style="color: #000000;"> IOException(ex);    }     </span><span style="color: #008000;">//</span><span style="color: #008000;"> 將MD5輸出的二進制結(jié)果轉(zhuǎn)換為小寫的十六進制</span>    StringBuilder sign = <span style="color: #0000ff;">new</span><span style="color: #000000;"> StringBuilder();    </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = 0; i < bytes.length; i++<span style="color: #000000;">) {        String hex </span>= Integer.toHexString(bytes[i] & 0xFF<span style="color: #000000;">);        </span><span style="color: #0000ff;">if</span> (hex.length() == 1<span style="color: #000000;">) {            sign.append(</span>"0"<span style="color: #000000;">);        }        sign.append(hex);    }    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> sign.toString();}</span>

注意:計算簽名時所有參數(shù)的key和value都必須先轉(zhuǎn)換為對應(yīng)的字符串類型,因為在HTTP請求中傳遞的內(nèi)容都是字符串類型的,很多開發(fā)者都因為沒注意到這點,直接將非字符串類型的參數(shù)的二進制值傳遞了進去,結(jié)果導(dǎo)致簽名與服務(wù)端計算的不一致而出錯。

C#代碼實現(xiàn)

獲取簽名的C#代碼實現(xiàn)方式如下所示:

<span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span><span style="color: #808080;">///</span><span style="color: #008000;"> 計算參數(shù)簽名</span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span><span style="color: #808080;">///</span> <span style="color: #808080;"><param name="params"></span><span style="color: #008000;">請求參數(shù)集,所有參數(shù)必須已轉(zhuǎn)換為字符串類型</span><span style="color: #808080;"></param></span><span style="color: #808080;">///</span> <span style="color: #808080;"><param name="secret"></span><span style="color: #008000;">簽名密鑰</span><span style="color: #808080;"></param></span><span style="color: #808080;">///</span> <span style="color: #808080;"><returns></span><span style="color: #008000;">簽名</span><span style="color: #808080;"></returns></span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">string</span> getSignature(IDictionary<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">string</span>> parameters, <span style="color: #0000ff;">string</span><span style="color: #000000;"> secret){    </span><span style="color: #008000;">//</span><span style="color: #008000;"> 先將參數(shù)以其參數(shù)名的字典序升序進行排序</span>    IDictionary<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">string</span>> sortedParams = <span style="color: #0000ff;">new</span> SortedDictionary<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">string</span>><span style="color: #000000;">(parameters);    IEnumerator</span><KeyValuePair<<span style="color: #0000ff;">string</span>, <span style="color: #0000ff;">string</span>>> iterator=<span style="color: #000000;"> sortedParams.GetEnumerator();     </span><span style="color: #008000;">//</span><span style="color: #008000;"> 遍歷排序后的字典,將所有參數(shù)按"key=value"格式拼接在一起</span>    StringBuilder basestring= <span style="color: #0000ff;">new</span><span style="color: #000000;"> StringBuilder();    </span><span style="color: #0000ff;">while</span><span style="color: #000000;"> (iterator.MoveNext()) {            </span><span style="color: #0000ff;">string</span> key =<span style="color: #000000;"> iterator.Current.Key;            </span><span style="color: #0000ff;">string</span> value =<span style="color: #000000;"> iterator.Current.Value;            </span><span style="color: #0000ff;">if</span> (!<span style="color: #0000ff;">string</span>.IsNullOrEmpty(key) && !<span style="color: #0000ff;">string</span><span style="color: #000000;">.IsNullOrEmpty(value)){                basestring.Append(key).Append(</span><span style="color: #800000;">"</span><span style="color: #800000;">=</span><span style="color: #800000;">"</span><span style="color: #000000;">).Append(value);            }    }    basestring.Append(secret);     </span><span style="color: #008000;">//</span><span style="color: #008000;"> 使用MD5對待簽名串求簽</span>    MD5 md5 =<span style="color: #000000;"> MD5.Create();    </span><span style="color: #0000ff;">byte</span>[] bytes =<span style="color: #000000;"> md5.ComputeHash(Encoding.UTF8.GetBytes(basestring.ToString()));     </span><span style="color: #008000;">//</span><span style="color: #008000;"> 將MD5輸出的二進制結(jié)果轉(zhuǎn)換為小寫的十六進制</span>    StringBuilder result = <span style="color: #0000ff;">new</span><span style="color: #000000;"> StringBuilder();    </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = <span style="color: #800080;">0</span>; i < bytes.Length; i++<span style="color: #000000;">) {            </span><span style="color: #0000ff;">string</span> hex = bytes[i].ToString(<span style="color: #800000;">"</span><span style="color: #800000;">x</span><span style="color: #800000;">"</span><span style="color: #000000;">);            </span><span style="color: #0000ff;">if</span> (hex.Length == <span style="color: #800080;">1</span><span style="color: #000000;">) {                result.Append(</span><span style="color: #800000;">"</span><span style="color: #800000;">0</span><span style="color: #800000;">"</span><span style="color: #000000;">);            }            result.Append(hex);    }     </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> result.ToString();}</span>

服務(wù)器接受請求后,同樣對參數(shù)進行簽名,如果簽名相同則數(shù)據(jù)沒有被修改或者丟失。

注意:計算簽名時所有參數(shù)的key和value都必須先轉(zhuǎn)換為對應(yīng)的字符串類型,因為在HTTP請求中傳遞的內(nèi)容都是字符串類型的,很多開發(fā)者都因為沒注意到這點,直接將非字符串類型的參數(shù)的二進制值傳遞了進去,結(jié)果導(dǎo)致簽名與服務(wù)端計算的不一致而出錯。

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

SQL中的identity屬性是什么意思? SQL中的identity屬性是什么意思? Feb 19, 2024 am 11:24 AM

SQL中的Identity是什么,需要具體代碼示例在SQL中,Identity是一種用于生成自增數(shù)字的特殊數(shù)據(jù)類型,它常用于唯一標識表中的每一行數(shù)據(jù)。Identity列通常與主鍵列配合使用,可以確保每條記錄都有一個獨一無二的標識符。本文將詳細介紹Identity的使用方式以及一些實際的代碼示例。Identity的基本使用方式在創(chuàng)建表時,可以使用Identit

使用java的String.valueOf()函數(shù)將基本數(shù)據(jù)類型轉(zhuǎn)換為字符串 使用java的String.valueOf()函數(shù)將基本數(shù)據(jù)類型轉(zhuǎn)換為字符串 Jul 24, 2023 pm 07:55 PM

使用Java的String.valueOf()函數(shù)將基本數(shù)據(jù)類型轉(zhuǎn)換為字符串在Java開發(fā)中,當(dāng)我們需要將基本數(shù)據(jù)類型轉(zhuǎn)換為字符串時,一種常見的方法是使用String類的valueOf()函數(shù)。這個函數(shù)可以接受基本數(shù)據(jù)類型的參數(shù),并返回對應(yīng)的字符串表示。在本文中,我們將探討如何使用String.valueOf()函數(shù)進行基本數(shù)據(jù)類型轉(zhuǎn)換,并提供一些代碼示例來

session失效怎么解決 session失效怎么解決 Oct 18, 2023 pm 05:19 PM

session失效通常是由于 session 的生存時間過期或者服務(wù)器關(guān)閉導(dǎo)致的。其解決辦法:1、延長session的生存時間;2、使用持久化存儲;3、使用cookie;4、異步更新session;5、使用會話管理中間件。

怎么把char數(shù)組轉(zhuǎn)string 怎么把char數(shù)組轉(zhuǎn)string Jun 09, 2023 am 10:04 AM

char數(shù)組轉(zhuǎn)string的方法:可以通過賦值來實現(xiàn),使用{char a[]=" abc d\0efg ";string s=a;}語法,讓char數(shù)組對string直接賦值,執(zhí)行代碼即可完成轉(zhuǎn)換。

PHP Session 跨域問題的解決方法 PHP Session 跨域問題的解決方法 Oct 12, 2023 pm 03:00 PM

PHPSession跨域問題的解決方法在前后端分離的開發(fā)中,跨域請求已成為常態(tài)。在處理跨域問題時,我們通常會涉及到session的使用和管理。然而,由于瀏覽器的同源策略限制,跨域情況下默認情況下無法共享session。為了解決這個問題,我們需要采用一些技巧和方法來實現(xiàn)session的跨域共享。一、使用cookie跨域共享session最常

Redis的共享session應(yīng)用如何實現(xiàn)短信登錄 Redis的共享session應(yīng)用如何實現(xiàn)短信登錄 Jun 03, 2023 pm 03:11 PM

1.基于session實現(xiàn)短信登錄1.1短信登錄流程圖1.2實現(xiàn)發(fā)送短信驗證碼前端請求說明:說明請求方式POST請求路徑/user/code請求參數(shù)phone(電話號碼)返回值無后端接口實現(xiàn):@Slf4j@ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1.校驗手機號if

使用java的String.replace()函數(shù)替換字符串中的字符(串) 使用java的String.replace()函數(shù)替換字符串中的字符(串) Jul 25, 2023 pm 05:16 PM

使用Java的String.replace()函數(shù)替換字符串中的字符(串)在Java中,字符串是不可變的對象,這意味著一旦創(chuàng)建了一個字符串對象,就無法修改它的值。但是,你可能會遇到需要替換字符串中的某些字符或者字符串的情況。這時候,我們可以使用Java的String類中的replace()方法來實現(xiàn)字符串的替換。String類的replace()方法有兩種重

不可修補的 Yubico 二因素身份驗證密鑰漏洞破壞了大多數(shù) Yubikey 5、安全密鑰和 YubiHSM 2FA 設(shè)備的安全性 不可修補的 Yubico 二因素身份驗證密鑰漏洞破壞了大多數(shù) Yubikey 5、安全密鑰和 YubiHSM 2FA 設(shè)備的安全性 Sep 04, 2024 pm 06:32 PM

無法修補的 Yubico 二因素身份驗證密鑰漏洞已經(jīng)破壞了大多數(shù) Yubikey 5、安全密鑰和 YubiHSM 2FA 設(shè)備的安全性。 Feitian A22 JavaCard和其他使用Infineon SLB96xx系列TPM的設(shè)備也容易受到攻擊。

See all articles