挂载到微信服务器上的应用程序,能够通过微信Oauth2认证,能够抓取到用户的微信信息,当然,你首先要通过微信的帐号资质审核。

一、基本思想

二、基本过程

1.登陆微信的公众平台(点击打开链接),在左侧的最下方找到开发者中心,记下你的AppID(应用ID),假设是i,与AppSecret(应用密钥),假设是s

在接口权限表中的高级接口,修改OAuth2.0网页授权,写入你挂载本应用的域名,假设是http://a.b.com。

2.在Eclipse中新建一个工程,由于使用到Servlet与Json,所以要在lib文件夹中放入如下两包:

3.在web.xml中写入:

wx_banding

Oauth.Jumping

wx_banding

/wx_banding

指明访问http://a.b.com/wx_bangding将会跳转到处理Servlet

4.在src文件中新建一个包叫Oauth,在这个包下新建一个类叫Jumping.java

Jumping.java下的代码如下:

package Oauth;

import java.io.IOException;

import javax.servlet.*;

import javax.servlet.http.*;

public class Jumping extends HttpServlet{

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

response.sendRedirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=i&redirect_uri=http://a.b.com/oauth.jsp&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect");

}

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException {

}

}

其中所跳转的链接中的appid与域名请替换成你自己的域名,同时oauth.jsp是我们下一步需要处理的页面

这样的作法是为了此验证网址中的appid不要暴露在外

并且用户也不用看到如此长的一串网址。

5.在WebRoot下的文件夹中新建一个oauth.jsp

注意修改好本页面的标题,不然此页会在微信端很难看

里面的

的代码如下:

String code = null;

try {

code = request.getParameter("code").toString();

} catch (Exception e) {

response.sendRedirect("http://a.b.com");

}

%>

window.location.href = "oauthLoading?code="

这是一段Jsp加Javascript的混合代码

意思是要拿到这次会话的code,如果拿不到,就跳转到我自己的首页http://a.b.com,恶意用户在电脑端访问此页就拿不到微信会话的code,表明此页面专为微信准备的。

window.location.href重定向指明要到oauthLoading这一Servlet中处理。

6.继续在web.xml添加如下代码段:

oauthLoading

Oauth.Loading

oauthLoading

/oauthLoading

指明要到Oauth包中的Loading.java中处理

7.继续在Oauth包中新建一个Loading.java

代码如下:

package Oauth;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.net.*;

import com.alibaba.fastjson.*;

public class Loading extends HttpServlet {

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException,

MalformedURLException, IOException {

String code = request.getParameter("code");

StringBuilder json = new StringBuilder();

String url = null;

BufferedReader in = null;

String inputLine = null;

String json1 = null;

JSONObject jobject = null;

//这里的appid与secret换成你自己的secret

url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=i&secret=s&code="

+ code + "&grant_type=authorization_code";

in = new BufferedReader(new InputStreamReader(new URL(url)

.openConnection().getInputStream(), "utf-8"));

while ((inputLine = in.readLine()) != null) {

json.append(inputLine);

}

in.close();

json1 = json.toString();

jobject = JSON.parseObject(json1);

json = new StringBuilder();

url = "https://api.weixin.qq.com/sns/userinfo?access_token="

+ jobject.getString("access_token") + "&openid="

+ jobject.getString("openid");

in = new BufferedReader(new InputStreamReader(new URL(url)

.openConnection().getInputStream(), "utf-8"));

inputLine = null;

while ((inputLine = in.readLine()) != null) {

json.append(inputLine);

}

in.close();

json1 = json.toString();

jobject = JSON.parseObject(json1);

request.setAttribute("jobject", jobject);

try {

request.getRequestDispatcher("WEB-INF/welcome.jsp").forward(request,

response);

} catch (IOException e) {

e.printStackTrace();

}

}

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException {

}

}

8.之后在WEB-INF中新建一个非经正常跳转不让看的welcome.jsp,此页面将会得到一个经历两重验证才得到的,包含用户信息的jobject。

welcome.jsp在头声明使用

之后在页身使用

拿到这个用户jobject之后,想怎么玩爱怎么玩。

java oauth2 severlet_【Servlet】基于Jsp的微信Oauth2认证 | 学步园相关推荐

  1. request、response揭秘(备java基础,servlet,jsp,javaee)-任亮-专题视频课程

    request.response揭秘(备java基础,servlet,jsp,javaee)-3658人已学习 课程介绍         掌握Request对象的作用,期属性,response特点. ...

  2. java动物乐园_基于jsp的动物园管理系统-JavaEE实现动物园管理系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的动物园管理系统, 该项目可用各类java课程设计大作业中, 动物园管理系统的系统架构分为前后台两部分, 最终实现在 ...

  3. java员工信息管理_基于jsp的员工信息管理-JavaEE实现员工信息管理 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的员工信息管理, 该项目可用各类java课程设计大作业中, 员工信息管理的系统架构分为前后台两部分, 最终实现在线上 ...

  4. 基于java家教管理系统_基于jsp的家教信息管理-JavaEE实现家教信息管理 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的家教信息管理, 该项目可用各类java课程设计大作业中, 家教信息管理的系统架构分为前后台两部分, 最终实现在线上 ...

  5. java 项目 人力资源项目,基于jsp的人力资源系统-JavaEE实现人力资源系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的人力资源系统, 该项目可用各类java课程设计大作业中, 人力资源系统的系统架构分为前后台两部分, 最终实现在线上 ...

  6. java餐饮管理系统图片,基于jsp的酒店餐饮管理系统-JavaEE实现酒店餐饮管理系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的酒店餐饮管理系统, 该项目可用各类java课程设计大作业中, 酒店餐饮管理系统的系统架构分为前后台两部分, 最终实 ...

  7. java固定资产管理系统_基于jsp的固定资产管理系统-JavaEE实现固定资产管理系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的固定资产管理系统, 该项目可用各类java课程设计大作业中, 固定资产管理系统的系统架构分为前后台两部分, 最终实 ...

  8. java 健身会所_基于jsp的健身俱乐部会员-JavaEE实现健身俱乐部会员 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的健身俱乐部会员, 该项目可用各类java课程设计大作业中, 健身俱乐部会员的系统架构分为前后台两部分, 最终实现在 ...

  9. java 花卉管理系统_基于jsp的花卉交易-JavaEE实现花卉交易 - java项目源码

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的花卉交易, 该项目可用各类java课程设计大作业中, 花卉交易的系统架构分为前后台两部分, 最终实现在线上进行花卉 ...

最新文章

  1. matlab genfunction,Keras / Python相当于nn工具箱中的Matlab的genFunction
  2. css cursor 常用值
  3. python对excel某一列求和-96、python操作excel求和
  4. 并发基础篇(四): java中线程的状态深入浅出
  5. extjs store 复杂json_extjs 2.3 修复 jsonstore 嵌套多级引用数据NULL的BUG
  6. linux 中安装 JDK
  7. 通信协议——HTTP、TCP、UDP
  8. 前端小课堂 js:what is the function?
  9. assubclass_Java类class asSubclass()方法及示例
  10. 选防晒霜 要看四个要点 - 健康程序员,至尚生活!
  11. leaflet报错:map container is already initialized
  12. WordCloud 中英文词云图绘制,看这一篇就够了
  13. Pt100铂电阻测温电路设计——
  14. entity framework 新手入门篇(2)-entity framework基本的增删改查
  15. 总结:读《程序员的自我修养》
  16. JLabel.setBounds的四个参数
  17. 【软件测试手册2021版】测试题总结
  18. 笔记本电脑连接显示器如何让笔记本电脑单纯作为一台主机进行使用/笔记本连接显示器以后只需要显示器进行显示的操作! 2021/1/16
  19. 教你一招利用python在网上接单赚钱,月薪过万太香了
  20. MyBatis和MyBatis-plus教程

热门文章

  1. 人工智能辅助药物发现(2)苗头化合物筛选
  2. CPU突然飙升,如何排查
  3. 蛋糕网上销售系统|基于Springboot+Vue开发实现网上蛋糕系统
  4. 字符串操作:截取及分割字符串
  5. js对象数组转数组对象
  6. 计算机如何安装更新,怎么安装和更新电脑驱动
  7. Java和Mysql——查询性能优化
  8. Linux内核地址空间布局详解
  9. java如何输入日期定义星座,求一个会java fx的大神 编写一个输入日期输出星座的代码 急急急...
  10. SQL注入的简单案例