基于servlet实现微信页面授权(经过测试)

    xiaoxiao2021-03-25  97

    基于servlet实现微信页面的授权,如你在实际的开发中可以随机应用。闲话不多讲请参考代码。

    微信api调用的开发文档点击打开链接

    1,web.xml 配置文件,简单的映射。

    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring MVC Application</display-name> <!--<servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>--> <!--基于servlet实现微信的页面授权--> <servlet> <servlet-name>weixin</servlet-name> <servlet-class>com.springapp.servlet.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>weixin</servlet-name> <url-pattern>/login.jsp</url-pattern> </servlet-mapping> <servlet> <servlet-name>wx</servlet-name> <servlet-class>com.springapp.servlet.servlet.WeixinServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>wx</servlet-name> <url-pattern>/weixin.jsp</url-pattern> </servlet-mapping> </web-app>

    2,每个项目都缺少不了的jar文件的依赖的,在这里需要的jar如下,但是这里我使用的是maven依赖,请参考。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.springapp</groupId> <artifactId>WebWeiXin</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>WebWeiXin</name> <properties> <spring.version>4.1.1.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--微信页面授权依赖的jar文件--> <!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib --> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier><!--注意--> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.2.3</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.2.5</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.servicemix.bundles/org.apache.servicemix.bundles.ezmorph --> <dependency> <groupId>org.apache.servicemix.bundles</groupId> <artifactId>org.apache.servicemix.bundles.ezmorph</artifactId> <version>1.0.6_1</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient --> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.0.1</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils-core --> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils-core</artifactId> <version>1.7.0</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-collections/commons-collections --> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2</version> </dependency> <!----> </dependencies> <build> <finalName>WebWeiXin</finalName> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <includes> <include>**/*Tests.java</include> </includes> </configuration> </plugin> </plugins> </build> </project> 3,简单的搭建一个工具类,实现http的请求。

    package com.springapp.servlet.utils; import net.sf.json.JSONObject; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import java.io.IOException; /** * @dxr * 发送http请求的工具类 * 定义常量APPID APPSERET */ public class AuthUtil { /** * 注册微信公众号时获取appId和appSecret * 对应赋值就ok了 */ public static final String APPID="wxc456cde34d7da37f"; public static final String APPSECRET="19cc85748ac4321039ad0234b25b843e"; public static JSONObject doGetHttp(String url) throws IOException { JSONObject jsonObject=null; DefaultHttpClient httpClient = new DefaultHttpClient(); //使用get方法 HttpGet doGet = new HttpGet(url); HttpResponse resp = httpClient.execute(doGet); HttpEntity entity = resp.getEntity(); if(entity !=null){ String result= EntityUtils.toString(entity,"UTF-8"); jsonObject=JSONObject.fromObject(result); } return jsonObject; } } 4,servlet的实现,有两个实现类,分别是授权页的实现和获取用户信息的实现

    package com.springapp.servlet.servlet; import com.springapp.servlet.utils.AuthUtil; import org.apache.http.client.utils.URLEncodedUtils; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; /** * 模拟授权页面 */ public class LoginServlet extends HttpServlet { /** * 使用doget方法实现业务 * @param req * @param resp * 用户同意授权,获取code */ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String baseUrl="/weixin.jsp"; //页面授权调用的路径 String url="https://open.weixin.qq.com/connect/oauth2/authorize?" + "appid=" + AuthUtil.APPID+ "&redirect_uri=" + URLEncoder.encode(baseUrl)+ "&response_type=code" + "&scope=snsapi_userinfo" + "&state=STATE#wechat_redirect"; //请求重定向 resp.sendRedirect(url); } } package com.springapp.servlet.servlet; import com.springapp.servlet.utils.AuthUtil; import net.sf.json.JSONObject; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class WeixinServlet extends HttpServlet { /** * @param req * @param resp * 通过code换取网页授权access_token * 拉取用户信息(需scope为 snsapi_userinfo) */ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { String code=req.getParameter("code"); //通过code换取网页授权access_token的调用路径 String url="https://api.weixin.qq.com/sns/oauth2/access_token?" + "appid=" + AuthUtil.APPID+ "&secret=" +AuthUtil.APPSECRET+ "&code=" +code+ "&grant_type=authorization_code"; //发送请求 JSONObject jsonObject = AuthUtil.doGetHttp(url); String openId=jsonObject.getString("openid"); String token=jsonObject.getString("access_token"); //拉取用户信息的路径 String userUrl="https://api.weixin.qq.com/sns/userinfo?" + "access_token=" +token+ "&openid=" +openId+ "&lang=zh_CN"; //发送请求 JSONObject user = AuthUtil.doGetHttp(userUrl); System.out.println("输出用户信息"+user.toString()); /** * 具体获取的用户信息的json格式请参考下面 * http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html */ //req.getRequestDispatcher("url").forward(req,resp); super.doGet(req,resp); } } 至此,微信的授权的业务已经完成,客官可以根据具体的实际开发来灵活运用,不管是用户信息的数据库存储,还是微信用户信息绑定项目账号的业务。

    转载请注明原文地址: https://ju.6miu.com/read-22656.html

    最新回复(0)