jfinal-weixin 用户授权登录
来源:互联网 发布:春风沉醉的夜晚知乎 编辑:程序博客网 时间:2024/06/05 07:21
1:微信拦截器
2:微信授权登录
在AppConst.java定义一个常量
/*微信跳转页面 的session key*/public static final String WX_REDIRECT_URL = "wx_redirect_url";
WechatConstants.java
public static final String AppId = "xxxx";public static final String AppSecret = "xxxx";public static final String token = "项目token换成自己的";public static final Boolean encryptMessage = false;public static final String encodingAesKey="setting it in config file";
/** * 用户同意授权,获取code * * @param url * @return */public static String buildUrl(String url) { try { return SnsAccessTokenApi.getAuthorizeURL(WechatConstants.AppId, URLEncoder.encode(url, "UTF-8"), "STATE", false); } catch (Exception e) { e.printStackTrace(); } return null;}
// ======================================// Package Name:com.kingyee.interceptor// File Name:WechatInterceptor.java// Create Date:2017年08月18日 10:12// ======================================package com.kingyee.interceptor;import com.jfinal.aop.Interceptor;import com.jfinal.aop.Invocation;import com.jfinal.core.Controller;import com.kingyee.common.AppConst;import com.kingyee.common.BaseUrl;import com.kingyee.wechat.menu.WechatConstants;import org.apache.log4j.Logger;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;/** * 微信拦截器 * * @author 李芳 * @version 2017年08月18日 10:12 */public class WechatInterceptor implements Interceptor { Logger log = Logger.getLogger(getClass()); @Override public void intercept(Invocation ai) { Controller controller = ai.getController(); HttpSession session = controller.getSession(); if (null != session && session.getAttribute(AppConst.WX_USER_SESSION_NAME) != null) { ai.invoke(); return; } else { try { //--------------- 保存微信跳转开始 ------------------------- if (!isAjax(controller.getRequest())) { //非Ajax请求 讲当前的url存入session,登录完成后,继续跳转到这个页面 String requestURI = controller.getRequest().getRequestURI(); //如果这个页面带参数咋办,取出参数 String queryString = controller.getRequest().getQueryString(); if (queryString != null) { if (!queryString.startsWith("?")) { queryString = "?" + queryString; } requestURI = requestURI + queryString; } session.setAttribute(AppConst.WX_REDIRECT_URL, requestURI); } else { //是ajax请求 就remove这个 ,在wxLogin 里面有默认的跳转地址,这里不做处理 session.removeAttribute(AppConst.WX_REDIRECT_URL); } //--------------- 保存微信跳转结束 ------------------------- String redirect_url = BaseUrl.BASE_URL + "wx/wxSnsAccess/wxLogin"; ai.getController().redirect(WechatConstants.buildUrl(redirect_url)); } catch (Exception e) { e.printStackTrace(); } } } public static boolean isAjax(HttpServletRequest request) { String requestType = request.getHeader("X-Requested-With"); return requestType != null; }}
// ======================================// Package Name:com.kingyee.wechat.controller// File Name:WxCodeController.java// Create Date:2017年08月18日 10:18// ======================================import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.jfinal.aop.Clear;import com.jfinal.core.Controller;import com.jfinal.kit.JsonKit;import com.jfinal.kit.PropKit;import com.jfinal.log.Log;import com.jfinal.plugin.activerecord.Record;import com.jfinal.weixin.sdk.api.*;import com.kingyee.common.AppConst;import com.kingyee.common.BaseUrl;import com.kingyee.wechat.menu.WechatConstants;import com.kingyee.wechat.wx_user.WxUser;import org.apache.commons.lang3.StringUtils;import java.util.Date;/** * redirect_url 返回一个code * * @author * @version 2017年08月18日 10:18 */public class WxCodeController extends Controller { static Log log = Log.getLog(WxCodeController.class); public ApiConfig getApiConfig() { ApiConfig ac = new ApiConfig(); ac.setAppId(WechatConstants.AppId); ac.setAppSecret(WechatConstants.AppSecret); ac.setToken(WechatConstants.token); ac.setEncryptMessage(WechatConstants.encryptMessage); ac.setEncodingAesKey(WechatConstants.encodingAesKey); return ac; } /** * 用户同意授权,获取code */ @Clear public void wxLogin() { int subscribe = 0; String code = super.getPara("code"); String state = getPara("state"); if (StringUtils.isNoneEmpty(code)) { ApiConfig config = getApiConfig(); ApiConfigKit.setThreadLocalApiConfig(config); String appId = ApiConfigKit.getApiConfig().getAppId(); String secret = ApiConfigKit.getApiConfig().getAppSecret(); SnsAccessToken accessToken = SnsAccessTokenApi.getSnsAccessToken(appId, secret, code); WxUser wxUser = WxUser.me.findByOpenId(accessToken.getOpenid()); if (wxUser != null) { WxUser token = getSessionAttr(AppConst.WX_USER_SESSION_NAME); if (token != null) { getSession().removeAttribute(AppConst.WX_USER_SESSION_NAME); } getSession().setAttribute(AppConst.WX_USER_SESSION_NAME, wxUser); } else { //通过access_token和openid拉取用户信息了。 ApiResult apiResult = SnsApi.getUserInfo(accessToken.getAccessToken(), accessToken.getOpenid()); log.warn("getUserInfo:" + apiResult.getJson()); if (apiResult.isSucceed()) { JSONObject jsonObject = JSON.parseObject(apiResult.getJson()); log.info(jsonObject.toJSONString()); //用户可能是通过朋友圈等并未关注公众号过来的 WxUser othersChanUser = new WxUser(); /*open_id*/ othersChanUser.set("open_id", accessToken.getOpenid()); /*access_token*/ othersChanUser.set("access_token", accessToken.getAccessToken()); /*昵称*/ othersChanUser.set("nickname", apiResult.getStr("nickname")); /*用户头像*/ othersChanUser.set("headimgurl", apiResult.getStr("headimgurl")); /*性别*/ othersChanUser.set("wx_sex", apiResult.getInt("sex")); /*城市*/ othersChanUser.set("wx_city_name", apiResult.getStr("city")); /*用户所在国家*/ othersChanUser.set("wx_country", apiResult.getStr("country")); /*省份*/ othersChanUser.set("wx_province_name", apiResult.getStr("province")); /*创建时间*/ othersChanUser.set("wx_create_time", new Date().getTime()); //获取用户信息判断是否关注 ApiResult userInfo = UserApi.getUserInfo(accessToken.getOpenid()); log.warn(JsonKit.toJson("is subsribe>>" + userInfo)); if (userInfo.isSucceed()) { String userStr = userInfo.toString(); subscribe = JSON.parseObject(userStr).getIntValue("subscribe"); othersChanUser.set("subscribe", subscribe); } othersChanUser.save(); WxUser token = getSessionAttr(AppConst.WX_USER_SESSION_NAME); if (token != null) { getSession().removeAttribute(AppConst.WX_USER_SESSION_NAME); } getSession().setAttribute(AppConst.WX_USER_SESSION_NAME, othersChanUser); } } //--------------- 微信跳转开始 ------------------------- String url = (String) getSession().getAttribute(AppConst.WX_REDIRECT_URL); System.out.println(url+"-------shadan"); log.info(url+"-------------------------ai------"); if (url == null) { url = BaseUrl.BASE_URL+"wx/index"; } if (url.startsWith("/")) { url = url.substring(1); } redirect(BaseUrl.BASE_URL + url); //--------------- 微信跳转结束 ------------------------- } else { renderText("code is null"); } }}
阅读全文
0 0
- jfinal-weixin 用户授权登录
- weixin登录
- 验证用户登录授权
- 关于Jfinal中用户登录的问题
- Oracle12C用户创建、授权、登录
- 创建登录用户并授权
- Oracle12C用户创建、授权、登录
- 【OAuth2.0网页授权】根据access_token和openId获取用户基本信息(Senparc.Weixin.MP.dll)
- 第三方登录(Weixin)
- JFinal Weixin 极速开发 SDK
- 如何利用JFinal-weixin写公众号
- JFinal学习笔记(二) 实现简单的用户登录
- JFinal学习笔记(三) 过滤器实现用户登录验证
- 拥有授权登录用户的应用程序设计
- oracle 用户登录企业管理器 授权问题
- mysql新建用户和授权登录
- SQL Server创建登录用户,授权
- oracle 用户的登录,授权,传递授权操作
- Eclipse安装插件总是失败
- 3S基础知识:MapInfo应用MapX编程实现地图数据查询
- PHP实现微信支付功能开发+实例代码
- linux下进入recovery mode 的单用户模式
- Unity3d八 Unity使用的坐标系
- jfinal-weixin 用户授权登录
- ConstraintLayout入门
- 老人遇骗子上门推销骗局
- linux中如何给每个用户的tomcat配置环境变量
- 小米面试题-----将二叉树打印成多行
- VSCode快捷使用
- 局部对象,static局部对象,static全局对象
- 慎用GsonFormat,小心入坑!
- 永远不要用obj.isEmpty(),