springmvc integriert die WeChat-Dienstkontoentwicklung von jfinal
Ich habe kürzlich die Entwicklung von WeChat-Dienstkonten untersucht und festgestellt, dass das von jfinal gepackte SDK recht gut ist, also habe ich beschlossen, es zu verwenden.
Hier kommt also die Frage: Es gibt eine Demo zu Git, wie integriert man sie also in sein eigenes Projekt? Einfach lernen und lernen. Unser Framework verwendet springmvc. Lassen Sie uns die Integrationsmethode und einige aufgetretene Probleme aufzeichnen:
1 In Ihrem Projekt müssen Sie zunächst auf das von jfinal benötigte JAR-Paket und das SDK-Paket von jfinal verweisen. .
2. Konfigurieren Sie in web.xml und starten Sie die jfinal-bezogene Konfiguration (muss über allen Interceptoren platziert werden)
<filter> <filter-name>jfinal</filter-name> <filter-class>com.jfinal.core.JFinalFilter</filter-class> <init-param> <param-name>configClass</param-name> <param-value>com.jfinal.weixin.demo.WeixinConfig</param-value> </init-param> </filter> <filter-mapping> <filter-name>jfinal</filter-name> <url-pattern>/weixin/*</url-pattern> </filter-mapping>
3. Erben Sie die Klasse WeixinMsgController und schreiben Sie die Methode neu, um die Nachrichtenempfangsfunktion zu erreichen
4. Die Hauptsache hier ist
Schreiben Sie selbst einen Interceptor, um WeChat-Anfragen abzufangen
<bean id="methodInvokerIntercepterManager" class="org.springframework.web.servlet.mvc.annotation.MethodInvokerIntercepterManager"> <property name="intercepters"> <list> <bean class="com.xtwl.reporter.weixin.NeedOpenId"></bean><!-- 处理是否微信认证 --> <bean class="com.xtwl.framework.security.utils.MethodPrivilegeIntercepter"> <property name="loginPage" value="/workspace/login" /> <property name="noauthPage" value="global/error/401.ftl" /> <property name="rejectMessage" value="您无权访问" /> <property name="loginPrompt" value="请先登录" /> </bean> </list> </property> </bean>
Schreiben Sie eine Klassen-OpenID für Anmerkungen und verwenden Sie sie
package com.xtwl.reporter.weixin; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; //检查是否需要登录 @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface Openid { }
Überprüfen Sie, ob Sie bei NeedOpenId angemeldet sind (überprüfen Sie, ob die Methode die obige Anmerkung aufweist, und führen Sie in diesem Fall eine WeChat-Überprüfung durch)
package com.xtwl.reporter.weixin;import java.lang.reflect.Method;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.ui.Model;import org.springframework.web.servlet.mvc.annotation.IMethodIntercepterHolder;import org.springframework.web.servlet.mvc.annotation.IMethodInvokerIntercepter;import com.jfinal.kit.PropKit;import com.jfinal.weixin.sdk.api.ApiConfig;import com.jfinal.weixin.sdk.api.ApiConfigKit;import com.jfinal.weixin.sdk.api.SnsAccessToken;import com.jfinal.weixin.sdk.api.SnsAccessTokenApi;import com.xtwl.reporter.business.StudentService;import com.xtwl.reporter.domain.Student;import com.xtwl.water.business.AdminInfoService;import com.xtwl.water.domain.AdminInfo;@Componentpublic class NeedOpenId implements IMethodInvokerIntercepter { @Autowired private AdminInfoService adminInfoService; @Autowired private StudentService studentService; @Override public Object invokeHandlerMethod(Method handlerMethod, Object handler, HttpServletRequest request, HttpServletResponse response, Model model, IMethodIntercepterHolder chain) throws Exception { if (handlerMethod.isAnnotationPresent(Openid.class)) { ApiConfigKit.setThreadLocalApiConfig(getApiConfig()); Openid access = handlerMethod.getAnnotation(Openid.class); if (access != null) {// 如果有标签 System.out.println("需要检查openid"); //String openid = WeiXinSession.getOpenid(); String openid="oWDxdt8F5UTP8L3XV-KcmZdLmP2Q";//测试用的 System.out.println("session中的openid 为:" + openid); System.out.println(request.getRequestURL()+"=======request.getRequestURL()2"); if (openid != null && openid.length() > 5) {// session中已经有了。放行 return todo(chain, handlerMethod, handler, request, response, model, openid); } if (openid == null || openid.length() < 5) {// 没有openid 需要重新获取 String url = SnsAccessTokenApi.getAuthorizeURL(ApiConfigKit .getApiConfig().getAppId(), request.getRequestURL().toString(), true); String code = (String) request.getParameter("code"); System.out.println("code为:" + code + " 这是微信返回的请求"); if (code != null && code.length() > 1) {// 是请求微信之后返回来的 // 带着openid SnsAccessToken sn = SnsAccessTokenApi .getSnsAccessToken(ApiConfigKit.getApiConfig().getAppId(),ApiConfigKit.getApiConfig().getAppSecret(), code); System.out.println("微信返回的openid:" + sn.getOpenid()); WeiXinSession.setOpenid(sn.getOpenid()); return todo(chain, handlerMethod, handler, request, response, model, sn.getOpenid()); } else { System.out.println("重定向到微信获取openid:" + url); return "redirect:" + url; } } } } return chain.doChain(handlerMethod, handler, request, response, model); } private Object todo(IMethodIntercepterHolder chain, Method handlerMethod, Object handler, HttpServletRequest request, HttpServletResponse response, Model model, String openid) throws Exception { try { System.out.println(request.getRequestURL()+"=======request.getRequestURL()1"); if(request.getRequestURL().toString().indexOf("/mobile/post_bind/")>0){//绑定页面 放行 return chain.doChain(handlerMethod, handler, request, response, model); } // 根据openid获取用户信息 本地的 AdminInfo admin = adminInfoService.getItemByOpenid(openid); System.out.println(admin + "========数据库中的admin"); if (admin == null || admin.getId() == null) {// 未绑定 System.out.println("redirect:/mobile/bind_phone"); return "redirect:/mobile/bind_phone"; } else { Student s = studentService.getItemById(admin.getOtherid()); WeiXinSession.setWeiXinAdminInfo(admin); WeiXinSession.setWeiXinStudent(s); } return chain.doChain(handlerMethod, handler, request, response, model); } catch (Exception e) { e.printStackTrace(); return chain.doChain(handlerMethod, handler, request, response, model); } } public ApiConfig getApiConfig() { ApiConfig ac = new ApiConfig(); // 配置微信 API 相关常量 ac.setToken(PropKit.get("token")); ac.setAppId(PropKit.get("appId")); ac.setAppSecret(PropKit.get("appSecret")); /** * 是否对消息进行加密,对应于微信平台的消息加解密方式: * 1:true进行加密且必须配置 encodingAesKey * 2:false采用明文模式,同时也支持混合模式 */ ac.setEncryptMessage(PropKit.getBoolean("encryptMessage", false)); ac.setEncodingAesKey(PropKit.get("encodingAesKey", "setting it in config file")); return ac; } }
Der nächste Schritt ist die Verwendung von
@RequestMapping("/mobile/myself")@Openidpublic String toIndex(Map<String, Object>model, Principal principal,HttpServletRequest request){ model.put("principal", principal); try { AdminInfo admin = WeiXinSession.getWeiXinAdminInfo();; Student s = WeiXinSession.getWeiXinStudent(); model.put("classes", classes); model.put("admin", admin); model.put("student", s); } catch (Exception e) { e.printStackTrace(); } return "mobile/person.ftl"; }

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



SpringBoot und SpringMVC sind beide häufig verwendete Frameworks in der Java-Entwicklung, es gibt jedoch einige offensichtliche Unterschiede zwischen ihnen. In diesem Artikel werden die Funktionen und Verwendungsmöglichkeiten dieser beiden Frameworks untersucht und ihre Unterschiede verglichen. Lassen Sie uns zunächst etwas über SpringBoot lernen. SpringBoot wurde vom Pivotal-Team entwickelt, um die Erstellung und Bereitstellung von Anwendungen auf Basis des Spring-Frameworks zu vereinfachen. Es bietet eine schnelle und einfache Möglichkeit, eigenständige, ausführbare Dateien zu erstellen

Was ist der Unterschied zwischen SpringBoot und SpringMVC? SpringBoot und SpringMVC sind zwei sehr beliebte Java-Entwicklungsframeworks zum Erstellen von Webanwendungen. Obwohl sie häufig separat verwendet werden, sind die Unterschiede zwischen ihnen offensichtlich. Zunächst einmal kann SpringBoot als Erweiterung oder erweiterte Version des Spring-Frameworks betrachtet werden. Es soll den Initialisierungs- und Konfigurationsprozess von Spring-Anwendungen vereinfachen und Entwicklern helfen

SpringBoot und SpringMVC sind zwei Frameworks, die häufig in der Java-Entwicklung verwendet werden. Sie werden beide vom Spring-Framework bereitgestellt, weisen jedoch einige Unterschiede in Funktionen und Verwendung auf. In diesem Artikel werden die Merkmale und Unterschiede von SpringBoot bzw. SpringMVC vorgestellt. 1. Funktionen von SpringBoot: Vereinfachte Konfiguration: SpringBoot vereinfacht den Projektkonfigurationsprozess erheblich durch das Prinzip der Konvention vor der Konfiguration. Es kann die für das Projekt und die Entwickler erforderlichen Parameter automatisch konfigurieren

Der Unterschied zwischen Spring und SpringMVC: 1. Positionierung und Funktionen; 3. Anwendungsfelder; Detaillierte Einführung: 1. Positionierung und Funktionen. Spring ist ein umfassendes Anwendungsentwicklungs-Framework, das Abhängigkeitsinjektion, aspektorientierte Programmierung, Transaktionsverwaltung und andere Funktionen bietet. Es soll die Entwicklung von Anwendungen auf Unternehmensebene vereinfachen Ein darin enthaltenes Modul wird für die Entwicklung von Webanwendungen verwendet und implementiert das MVC-Muster 2. Kernfunktionen und so weiter.

Die Unterschiede zwischen Springboot und SpringMVC sind: 1. Unterschiedliche Konfigurationen; bereitgestellte Funktion; 8. Verschiedene Funktionen; 9. Unterschiedliche Community- und Dokumentationsunterstützung; 10. Ob Bereitstellungsdeskriptoren erforderlich sind.

Mit der Entwicklung des Internets werden Webdienste immer häufiger eingesetzt. Als Anwendungsprogrammierschnittstelle bringt JavaAPI ständig neue Versionen auf den Markt, um sich an unterschiedliche Anwendungsszenarien anzupassen. Als beliebtes Open-Source-Framework kann SpringMVC uns dabei helfen, auf einfache Weise Webanwendungen zu erstellen. In diesem Artikel wird ausführlich erläutert, wie SpringMVC für die Webdienstverarbeitung in der JavaAPI-Entwicklung verwendet wird, einschließlich der Konfiguration von SpringMVC, dem Schreiben von Controllern und der Verwendung

Analyse der Ähnlichkeiten und Unterschiede zwischen SpringBoot und SpringMVC SpringBoot und SpringMVC sind sehr wichtige Entwicklungsframeworks im Java-Bereich. Obwohl beide Teil des Spring-Frameworks sind, gibt es einige offensichtliche Unterschiede in der Verwendung und Funktionalität. In diesem Artikel werden SpringBoot und SpringMVC verglichen und die Ähnlichkeiten und Unterschiede zwischen ihnen analysiert. Lassen Sie uns zunächst etwas über SpringBoot lernen. SpringBo

Die Rolle des Interceptors von SpringMVC ähnelt dem Filter in der Servlet-Entwicklung, der zur Vor- und Nachbearbeitung des Prozessors verwendet wird. Abfangjäger werden in einer bestimmten Reihenfolge zu einer Kette verbunden, und diese Kette wird als Abfangkette (InterceptorChain) bezeichnet. Wenn auf eine abgefangene Methode oder ein abgefangenes Feld zugegriffen wird, werden die Interceptoren in der Interceptor-Kette in der Reihenfolge aufgerufen, in der sie zuvor definiert wurden. Abfangjäger sind auch die konkrete Umsetzung von AOP-Ideen. Der Unterschied zwischen Interceptoren und Filtern: Filter (Filter) Der Verwendungsbereich von Interceptor (Intercepter) ist Teil der Servlet-Spezifikation und kann von jedem JavaWeb-Projekt verwendet werden
