博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于Spring MVC 的微信用户Controller基类
阅读量:7108 次
发布时间:2019-06-28

本文共 4258 字,大约阅读时间需要 14 分钟。

hot3.png

/** * 微信WEB辅助类,需要微信用户参与的页面可以继承此类解决授权问题 * Created by yangyan on 2015/6/4. */public class WeChatUserSupportController {    Logger log = LoggerFactory.getLogger(WeChatUserSupportController.class);    /**     * 微信授权用户的TOKEN存储在session中的key     */    public static final String SESSION_KEY_USER_TOKEN = "wx_token";    @Autowired    WeChat weChat;    @Autowired    WeChatApp weChatApp;    /**     * 判断当前访问微信用户是否授权     *     * @return     */    protected boolean isAuthed() {        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();        Object attribute = request.getSession() == null ? null : request.getSession().getAttribute(SESSION_KEY_USER_TOKEN);        return attribute != null;    }    /**     * 获取当前微信授权微信用户的token     *     * @return     */    protected UserAccessToken getToken() {        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();        Object attribute = request.getSession() == null ? null : request.getSession().getAttribute(SESSION_KEY_USER_TOKEN);        return (UserAccessToken) attribute;    }    /**     * 获取当前微信用户的OpenId     *     * @return     */    protected String getOpenId() {        UserAccessToken token = this.getToken();        if (token != null) {            return token.getOpenid();        }        return null;    }    /**     * 授权只获取用户的openId时使用此方法跳转     *     * @param redirectUrl     * @param state     * @return     */    protected ModelAndView baseAuth(String redirectUrl, String state) {        String authorizationBaseUrl = weChat.getUserApi().getAuthorizationBaseUrl(redirectUrl, state);        return new ModelAndView(new RedirectView(authorizationBaseUrl, false));    }    /**     * 授权需要获取用户的OpenId和基本信息时使用此方法调转     *     * @param redirectUrl     * @param state     * @return     */    protected ModelAndView userAuth(String redirectUrl, String state) {        String authorizationBaseUrl = weChat.getUserApi().getAuthorizationUserInfoUrl(redirectUrl, state);        return new ModelAndView(new RedirectView(authorizationBaseUrl, false));    }    /**     * 此方法的功能是使用code换取微信用户的token,然后将token保存在用户的session中。应该在自己的HTTP请求处理方法中构造callback,然后调用此方法     *     * @param state     * @param code     * @param callback     * @return     */    protected ModelAndView callbackAuth(String code, String state, OAuthCallback callback) {        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getResponse();        UserAccessToken accessToken = null;        if (callback == null) {            try {                response.getWriter().print("Error,callback is required");            } catch (IOException e) {                e.printStackTrace();            }        }        if (StringUtils.isNotBlank(code)) {            try {                accessToken = weChat.getUserApi()                        .getAccessToken(code);            } catch (Exception e) {                log.error("微信用户授权发生异常", e);                return callback.failure(request, response, state, new AppException("微信用户授权时发生异常", e));            }        }        if (accessToken != null) {            request.getSession(true).setAttribute(SESSION_KEY_USER_TOKEN, accessToken);            return callback.success(request, response, state);        } else {            return callback.failure(request, response, state, null);        }    }    /**     * 授权结果回调处理抽象类,不同场景下的授权回调处理应该继承此类根据不同的场景做处理     */    public static abstract class OAuthCallback {        /**         * 授权成功的时候进入此方法执行         *         * @param state 授权返回时带有的参数         * @return 跳转到什么地方         */        public abstract ModelAndView success(HttpServletRequest request, HttpServletResponse response, String state);        /**         * 授权失败的时候进入此方法执行         *         * @param state     授权返回时带有的参数         * @param exception 授权抛出的异常         * @return 跳转到什么地方         */        public abstract ModelAndView failure(HttpServletRequest request, HttpServletResponse response, String state, AppException exception);    }}
 

tips:

本文由导入,原文链接:

转载于:https://my.oschina.net/yangyan/blog/859245

你可能感兴趣的文章
查看linux 版本
查看>>
2017-3-27日碎碎念
查看>>
ORACLE 归档模式
查看>>
OFFICE 2007 SP3后续补丁微软官方下载地址
查看>>
zabbix监控redis多实例
查看>>
"Volume Shadow Copy Service" error
查看>>
crontab 计划任务 linux计划任务基本
查看>>
18.存储过程--SQL
查看>>
我的友情链接
查看>>
ISA Server签名
查看>>
C# C/S 图片验证码功能源码
查看>>
SCVMM 2012 SP1 安装与配置指南(一)概述
查看>>
在eclipse中使用断言Assert
查看>>
P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers
查看>>
win2003域控迁移2008
查看>>
文档相似度算法
查看>>
Docker在生产环境中的应用--开篇
查看>>
zabbix监控window2008 R2的IIS一些性能监控
查看>>
java基础
查看>>
关于如何调节佳能复试打印机IR3245如何调节打印清晰度方法
查看>>