基于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);
}
}
至此,微信的授权的业务已经完成,客官可以根据具体的实际开发来灵活运用,不管是用户信息的数据库存储,还是微信用户信息绑定项目账号的业务。
![大笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)