


Comment le mode singleton résout-il le problème du cache global access_token ?
Mettez initialement le access_token dans la base de données et déterminez s'il a expiré à chaque fois qu'il est obtenu. Cela peut résoudre le problème de la période de validité et du nombre de visites de access_token. Cependant, récemment, il est nécessaire d'interfacer le compte officiel avec le système et d'annuler la base de données du compte officiel. À l'heure actuelle, il n'est pas approprié de mettre access_token, etc. dans la base de données du système.
Bénéficiez de cet article de Xue Xilin : WeChat gère le problème de mise en cache globale access_token, implémenté Utilisation mode singleton pour mettre en cache access_token.
Mémorisez-le pour référence future.
Marquez la structure de votre code :
public class TokenSingleton { //缓存accessToken 的Map ,map中包含 一个accessToken 和 缓存的时间戳 private Map<String, String> map = new HashMap<>(); private TokenSingleton() { } private static TokenSi ngleton single = null; // 静态工厂方法 public static TokenSingleton getInstance() { if (single == null) { single = new TokenSingleton(); } return single; } public Map<String, String> getMap() { String time = map.get("time"); String accessToken = map.get("access_token"); Long nowDate = new Date().getTime(); if (accessToken != null && time != null && nowDate - Long.parseLong(time) < 6000*1000) { System.out.println("accessToken存在,且没有超时 , 返回单例"); } else { System.out.println("accessToken 超时 , 或者不存在 , 重新获取"); String access_token=JSSDKUtil.getAccessToken(); //这里是直接调用微信的API去直接获取 accessToken 和Jsapi_ticket 获取 String jsapi_token = JSSDKUtil.getTicket(access_token); //"获取jsapi_token"; map.put("time", nowDate + ""); map.put("access_token", access_token); map.put("jsapi_token", jsapi_token); } return map; } public void setMap(Map<String, String> map) { this.map = map; } public static TokenSingleton getSingle() { return single; } public static void setSingle(TokenSingleton single) { TokenSingleton.single = single; } }
Une autre classe d'outils JSSDKUtil.java a intercepté une partie :
public static String getSignature(String accessToken,String jsapi_ticket,String noncestr,String timestamp,String url){ System.out.println("accessToken:"+accessToken+"\njsapi_ticket:"+jsapi_ticket+"\n时间戳:"+timestamp+"\n随机字符串:"+noncestr+"\nURL:"+url); //5、将参数排序并拼接字符串 String str = "jsapi_ticket="+jsapi_ticket+"&noncestr="+noncestr+"×tamp="+timestamp+"&url="+url; //6、将字符串进行sha1加密 String signature =SHA1(str); System.out.println("参数:"+str+"\n签名:"+signature); return signature; } public static String getAccessToken() { String wx_appid = getProperties("wx_appid"); String wx_appsecret = getProperties("wx_appsecret"); String access_token = ""; String grant_type = "client_credential";//获取access_token填写client_credential String AppId=wx_appid;//第三方用户唯一凭证 String secret=wx_appsecret;//第三方用户唯一凭证密钥,即appsecret //这个url链接地址和参数皆不能变 String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type="+grant_type+"&appid="+AppId+"&secret="+secret; try { URL urlGet = new URL(url); HttpURLConnection http = (HttpURLConnection) urlGet.openConnection(); http.setRequestMethod("GET"); // 必须是get方式请求 http.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); http.setDoOutput(true); http.setDoInput(true); System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒 System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒 http.connect(); InputStream is = http.getInputStream(); int size = is.available(); byte[] jsonBytes = new byte[size]; is.read(jsonBytes); String message = new String(jsonBytes, "UTF-8"); JSONObject demoJson = JSONObject.fromObject(message); System.out.println("JSON字符串:"+demoJson); access_token = demoJson.getString("access_token"); is.close(); } catch (Exception e) { e.printStackTrace(); } return access_token; } public static String getTicket(String access_token) { String ticket = null; String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+ access_token +"&type=jsapi";//这个url链接和参数不能变 try { URL urlGet = new URL(url); HttpURLConnection http = (HttpURLConnection) urlGet.openConnection(); http.setRequestMethod("GET"); // 必须是get方式请求 http.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); http.setDoOutput(true); http.setDoInput(true); System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒 System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒 http.connect(); InputStream is = http.getInputStream(); int size = is.available(); byte[] jsonBytes = new byte[size]; is.read(jsonBytes); String message = new String(jsonBytes, "UTF-8"); JSONObject demoJson = JSONObject.fromObject(message); System.out.println("JSON字符串:"+demoJson); ticket = demoJson.getString("ticket"); is.close(); } catch (Exception e) { e.printStackTrace(); } return ticket; } public static String SHA1(String decript) { try { MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1"); digest.update(decript.getBytes()); byte messageDigest[] = digest.digest(); // Create Hex String StringBuffer hexString = new StringBuffer(); // 字节数组转换为 十六进制 数 for (int i = 0; i < messageDigest.length; i++) { String shaHex = Integer.toHexString(messageDigest[i] & 0xFF); if (shaHex.length() < 2) { hexString.append(0); } hexString.append(shaHex); } return hexString.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; }
Recommandations associées :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











Les instructions SQL IF sont utilisées pour exécuter conditionnellement les instructions SQL, avec la syntaxe comme: if (condition) alors {instruction} else {instruction} end if;. La condition peut être n'importe quelle expression SQL valide, et si la condition est vraie, exécutez la clause alors; Si la condition est fausse, exécutez la clause ELSE. Si les déclarations peuvent être imbriquées, permettant des contrôles conditionnels plus complexes.

Comment configurer Zend dans Apache? Les étapes pour configurer Zend Framework dans un serveur Web Apache sont les suivantes: installer Zend Framework et l'extraire dans le répertoire du serveur Web. Créez un fichier .htaccess. Créez le répertoire d'application Zend et ajoutez le fichier index.php. Configurez l'application Zend (application.ini). Redémarrez le serveur Web Apache.

Les principales raisons pour lesquelles vous ne pouvez pas vous connecter à MySQL en tant que racines sont des problèmes d'autorisation, des erreurs de fichier de configuration, des problèmes de mot de passe incohérents, des problèmes de fichiers de socket ou une interception de pare-feu. La solution comprend: vérifiez si le paramètre Bind-Address dans le fichier de configuration est configuré correctement. Vérifiez si les autorisations de l'utilisateur racine ont été modifiées ou supprimées et réinitialisées. Vérifiez que le mot de passe est précis, y compris les cas et les caractères spéciaux. Vérifiez les paramètres et les chemins d'autorisation du fichier de socket. Vérifiez que le pare-feu bloque les connexions au serveur MySQL.

La clé de la stratégie de défense de sécurité PHPMYADMIN est: 1. Utilisez la dernière version de PhpMyAdmin et mettez régulièrement à jour PHP et MySQL; 2. Contrôler strictement les droits d'accès, utiliser .htaccess ou le contrôle d'accès au serveur Web; 3. Activer le mot de passe fort et l'authentification à deux facteurs; 4. Sauvegarder régulièrement la base de données; 5. Vérifiez soigneusement les fichiers de configuration pour éviter d'exposer des informations sensibles; 6. Utiliser le pare-feu d'application Web (WAF); 7. Effectuer des audits de sécurité. Ces mesures peuvent réduire efficacement les risques de sécurité causés par le phpmyadmin en raison d'une configuration inappropriée, d'une version antérieure ou de risques de sécurité environnementale, et d'assurer la sécurité de la base de données.

Cet article décrit comment surveiller efficacement les performances SSL des serveurs Nginx sur les systèmes Debian. Nous utiliserons NginxExporter pour exporter des données d'état NGINX à Prometheus, puis l'afficher visuellement via Grafana. Étape 1: Configuration de Nginx Tout d'abord, nous devons activer le module Stub_Status dans le fichier de configuration NGINX pour obtenir les informations d'état de Nginx. Ajoutez l'extrait suivant dans votre fichier de configuration Nginx (généralement situé dans /etc/nginx/nginx.conf ou son fichier incluant): emplacement / nginx_status {Stub_status

VProCSERAZRABOTKIVEB-ENCLOSED, мне démar Leavally umballancefriabancefaumdoptomatification, čtookazalovnetakprosto, kakaožidal.posennesko

La surveillance et la défense efficaces contre l'accès au site Web malveillant sont cruciales pour le serveur Apache sur le système Debian. Les journaux d'accès Apache sont la principale source d'informations pour identifier ces menaces. Cet article vous guidera sur la façon d'analyser les journaux et de prendre des mesures défensives. Le journal d'accès Apache qui identifie les comportements d'accès malveillants Debian Systems est généralement situé dans /var/log/apache2/access.log. Vous pouvez analyser les journaux de diverses manières: Confirmation de l'emplacement du fichier journal: Tout d'abord, veuillez confirmer l'emplacement exact de votre journal d'accès Apache, qui peut varier légèrement en fonction de la configuration du système. Analyse des outils de ligne de commande: utilisez la commande grep pour rechercher des modèles spécifiques, tels que Grep "404"

Apache Server est un puissant logiciel de serveur Web qui agit comme un pont entre les navigateurs et les serveurs de sites Web. 1. Il gère les demandes HTTP et renvoie le contenu de la page Web en fonction des demandes; 2. La conception modulaire permet des fonctions étendues, telles que la prise en charge du chiffrement SSL et des pages Web dynamiques; 3. Les fichiers de configuration (tels que les configurations d'hôte virtuels) doivent être soigneusement définis pour éviter les vulnérabilités de sécurité et optimiser les paramètres de performance, tels que le nombre de threads et le temps de délai d'expiration, afin de créer des applications Web haute performance et sécurisées.
