Java web微信请求拦截器(微信公众号开发),获取微信用户信息。

package com.mvc.interceptor;

import com.alibaba.fastjson.JSONObject;

import com.mvc.utils.HttpUtil;

import org.apache.commons.lang3.StringUtils;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.net.URLEncoder;

/**

* 微信请求拦截器

*

* @author smallk

* @date 2018/12/3 0:39

*/

public class WxRequestInterceptor implements HandlerInterceptor {

@Value("${wx.appId}")

private String appId;

@Value("${wx.appSecret}")

private String appSecret;

@Override

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception e) throws Exception {

//

}

@Override

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView e) throws Exception {

//

}

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {

String backURL = request.getRequestURL().toString();

if (request.getQueryString() != null) {

backURL += "?" + request.getQueryString();

}

HttpSession session = request.getSession();

String userAgent = request.getHeader("User-Agent");

//判断是否是微信浏览器

if (userAgent == null || !userAgent.toLowerCase().contains("micromessenger")) {

return true;

}

JSONObject wxUserInfoJson = (JSONObject) session.getAttribute("sessionWxUserInfoJson");

if (wxUserInfoJson != null) {

return true;

}

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

// 第一次访问

if (StringUtils.isBlank(code)) {

response.sendRedirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid="

+ appId

+ "&redirect_uri="

+ URLEncoder.encode(backURL, "UTF-8")

+ "&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect");

return false;

}

// 微信认证回来

JSONObject authJson = this.getOpenId(appId, appSecret, code);

String openId = authJson.getString("openid");

if (openId == null) {

return false;

}

String accessToken = authJson.getString("access_token");

wxUserInfoJson = this.getWxUserInfo(accessToken, openId);

session.setAttribute("sessionWxUserInfoJson", wxUserInfoJson);

return true;

}

private JSONObject getOpenId(String appId, String appSecret, String code) throws Exception {

String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="

+ appId

+ "&secret="

+ appSecret

+ "&code="

+ code

+ "&grant_type=authorization_code";

String res = HttpUtil.getSSL(url, null, 0, 0);

return JSONObject.parseObject(res);

}

private JSONObject getWxUserInfo(String accessToken, String openId) throws Exception {

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

+ accessToken

+ "&openid="

+ openId

+ "&lang=zh_CN";

String res = HttpUtil.getSSL(url, null, 0, 0);

return JSONObject.parseObject(res);

}

}

java 微信请求_Java web微信请求拦截器(微信公众号开发)相关推荐

  1. 微信公众号开发 - token获取(保证同一时间段内只请求一次)

    微信公众号开发文章目录 1.微信公众号开发 - 环境搭建 2.微信公众号开发 - 配置表设计以及接入公众号接口开发 3.微信公众号开发 - token获取(保证同一时间段内只请求一次) 4.微信公众号 ...

  2. Java微信公众号开发之网页授权获取用户基本信息

    本篇博客讲解的网页授权只需要前端传递一个backUrl(回调地址) 到后台接口,后台接口会完成整个授权流程,无需前端做更多工作: 一. 前言 微信公众号开发,需要用到网页授权获取用户信息,通过OAut ...

  3. 慕课网_《Java微信公众号开发进阶》学习总结

    时间:2017年08月12日星期六 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学源码:http://img.mukewang.com/down/... 学习 ...

  4. Java微信公众号开发微信网页授权之前端传递code方式获取用户信息

    本片博客讲解的网页授权分为两步,前端先传递backUrl(回调地址)到后台网页授权接口,该接口拿到回调地址后组装授权连接,重定向到前端页面,前端页面截取Code,传入后端获取用户信息方法,获取用户信息 ...

  5. Java微信公众号开发(一:接入平台,验证token)

    Java微信公众号开发(一:接入平台,验证token) 开发环境: 环境:JDK1.8 框架:springBoot 首先,在我们接入微信公众平台之前,我们需要注册微信公众号的开发者账号,获取开发者ID ...

  6. 微信公众号开发-java版 腾讯课堂(开发接入)

    微信公众号开发-java版 腾讯课堂 微信测试号申请地址: 微信二维码直接扫描登录 1.新建web项目 2.内网穿透映射公网ip  (免费隧道需要支付宝实名认证) 3.微信接入验证签名 TOKEN自己 ...

  7. Java 微信公众号开发_学习笔记

    一.课程介绍 本套课程的学习内容,开发语言 微信公众号介绍,申请以及后台设置详解 编辑模式下的消息回复,菜单建立,素材管理等 开发前的环境搭建以及工具准备 开发者模式的切换.以及消息的接收与响应 百度 ...

  8. 微信公众号开发Java版

    源码地址: https://github.com/ishuaige/myWxMp https://gitee.com/niumazlb/myWxMp 一.申请微信开发者账号 注册账号 申请测试号 这里 ...

  9. Java+微信公众号开发学习总结(一)

    这两天自己想学习微信公众号开发,于是在网上搜索并上手练习,在这个过程中因为各种问题,(描述不完整,有的文章不知道怎么就蹦出个新的常量,也没说在哪定义的,还有jar包版本的问题坑了我一天的时间)所以特此 ...

最新文章

  1. OpenCV3.2.0+VS2017在window10开发环境配置记录
  2. MySQL 字符串删除表情符_PHP处理字符中的emoji表情(判断/移除/存储)
  3. 算法 求和为n的连续正整数序列 C
  4. 案例式c语言程序设计陈明,C语言程序设计教程 清华大学出版社 陈明主编 第1章答案...
  5. 如何判断基因组的重复区域_Nat Comm. | 15万人类基因组中多核苷酸变异(MNV)的起源及功能研究...
  6. Ubuntu安装教程【超多图】
  7. php 输出方法,PHP输出打印方法
  8. Kafka Connect简介
  9. SQLServer还原 指定的转换无效解决方法
  10. 如何还原桌面图标_如何为Windows 10桌面图标还原或更改文本的默认外观?
  11. UPS分类:直流UPS和交流UPS
  12. linux使用苹果字体,Ubuntu 8.04字体美化之安装苹果丽黑字体教程(图)
  13. python的前端个web的前端有什么区别_用Python 操作Web 前端 基础
  14. 当下的互联网时代,“急功近利”不是坏事
  15. Servlet教程第6讲笔记
  16. 快进来,详解MySQL游标
  17. openwrt打印机服务器稳定性,软路由 篇一:openwrt共享打印机【上】【完美解决】HP10系打印异常问题...
  18. 天龙八部3d最新服务器,天龙八部3D妙笔生花新服务器开启公告
  19. ddns动态域名注册
  20. 【bat】bat批处理安装与卸载软件,自动安装

热门文章

  1. mysql中存储引擎是啥_mysql中的存储引擎
  2. ts定义html是什么类型,TypeScript—类型定义文件(*.d.ts)
  3. 计算机类大一需要学什么原因,大一新生上大学要不要带电脑?我认为不论什么专业,电脑是必需品...
  4. linux系统内核官网,五年26个版本:Linux系统内核全程回顾
  5. weblogic 用的人还多吗_2020年劳务工越来越多,出现这种“怪现状”,是发展的需求吗?...
  6. 一人之力,毁掉一个开发者活动
  7. pi数据库系统中国服务器,基于PI数据库的服务器实时监控系统研究与开发
  8. mnist手写数字识别_手写数字识别
  9. python替换缺失值_详解Pandas 处理缺失值指令大全
  10. OpenCV-图像特征harris角点检测/SIFT函数/特征匹配-05