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

基于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);
    }
}

至此,微信的授权的业务已经完成,客官可以根据具体的实际开发来灵活运用,不管是用户信息的数据库存储,还是微信用户信息绑定项目账号的业务。 大笑

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值