微信企業號簡單的OAuth2驗證介面執行個體(使用SpringMVC非註解方式),oauth2springmvc

來源:互聯網
上載者:User

企業號簡單的OAuth2驗證介面執行個體(使用SpringMVC非註解方式),oauth2springmvc
企業號簡單的OAuth2驗證介面執行個體(使用SpringMVC非註解方式)

目前企業號只提供了scope為"snsapi_base"的應用授權範圍,也就是不會跳轉到讓使用者授權的頁面。

之前寫了使用註解方式驗證並擷取使用者資訊的執行個體,大家不是很理解,問題很多,現在附上簡單的驗證擷取使用者資訊的執行個體!


企業號OAuth2驗證介面執行個體(使用SpringMVC)


OAuth2.0驗證需要注意:

1.redirect_uri參數是授權回調地址,也就是說這個地址外網是可以訪問的,所以如果使用本機對應伺服器的猿們請修改為外網可以訪問的地址!
2.配置可信網域名稱,可信網域名稱是1中redirect_uri的網域名稱部分,不需要http,支援次層網域及IP地址!
3.根據回調到你地址的URL 中會帶有code參數,code參數每次擷取的值都不一樣並且5分鐘有效。

4.在使用code參數擷取使用者資訊的時候,確保每次的code參數都是新的,之前看到有人每次擷取的code是新的但是傳如的code還是之前已經使用過的,因此謹慎!


此處附上代碼:

SimpleOAuth2Controller:

<span style="font-family:FangSong_GB2312;font-size:14px;">package org.oms.qiye.web;import java.io.UnsupportedEncodingException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.oms.qiye.pojo.AccessToken;import org.oms.qiye.util.Constants;import org.oms.qiye.util.QiYeUtil;import org.oms.qiye.util.Result;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;/** * 單純實現OAuth2驗證,不使用註解及攔截器 * @author Sunlight * */@Controllerpublic class SimpleOAuth2Controller {/** * 拼接網頁授權連結 * 此處步驟也可以用頁面連結代替 * @return */@RequestMapping(value = { "/oauth2wx.do" })public String Oauth2API(HttpServletRequest request){//擷取項目網域名稱String reqUrl =request.getLocalAddr();//拼接回調地址String backUrl ="http://" + reqUrl + "/oauth2me.do";String redirect_uri = "";try {redirect_uri = java.net.URLEncoder.encode(backUrl, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}String oauth2Url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + Constants.CORPID + "&redirect_uri=" + redirect_uri+ "&response_type=code&scope=snsapi_base&state=sunlight#wechat_redirect";return "redirect:" + oauth2Url;}/** * 授權回調請求處理 * @return */@RequestMapping(value = { "/oauth2me.do" })public String oAuth2Url(HttpServletRequest request, @RequestParam String code){AccessToken accessToken = QiYeUtil.getAccessToken(Constants.CORPID, Constants.SECRET);HttpSession session = request.getSession();if (accessToken != null && accessToken.getToken() != null) {String Userid = getMemberGuidByCode(accessToken.getToken(), code, Constants.AGENTID);if (Userid != null) {session.setAttribute("UserId", Userid);}}// 這裡簡單處理,儲存到session中return "user";}/** * 調用介面擷取使用者資訊 *  * @param token * @param code * @param agentId * @return * @throws SQLException * @throws RemoteException */public String getMemberGuidByCode(String token, String code, int agentId) {System.out.println("code==" + code + "\ntoken=" + token + "\nagentid=" + agentId);Result<String> result = QiYeUtil.oAuth2GetUserByCode(token, code, agentId);System.out.println("result=" + result);if (result.getErrcode() == "0") {if (result.getObj() != null) {// 此處可以通過授權用code還錢的Userid查詢自己本機伺服器中的資料return result.getObj();}}return "";}}</span>

運行:

伺服器調試圖:



手機端結果:



轉載請註明出處,以免慘不忍睹!

技術交流請加入QQ群:點選連結加入群【企業號開發交流】:http://jq.qq.com/?_wv=1027&k=RgbtOX

QQ群:89714226


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.