为了增加用户体验,用户能够快速的注册登录,第三方账号进行登录注册的的需求也就由此而诞生
<a href="http://s1.51cto.com/wyfs02/M01/88/60/wKiom1fzcGmw7PCJAAIosTb8rHY899.png-wh_500x0-wm_3-wmp_4-s_3686603957.png" target="_blank"></a>
1、微信
1) 微信登录也是最坑人的,需要花300大洋成为开发者账户,没办法谁让微信用户群体大呢所以也就只好认了;然后登录网站后台需要创建网站应用,填写授权回调域(登录网站的域名)只填写域名即可
2)查看微信提供的接口,写java代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<code> </code><code>public</code> <code>void</code> <code>wx() {</code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>response.sendRedirect(</code><code>"https://open.weixin.qq.com/connect/qrconnect?appid="</code>
<code> </code><code>+ ShareLoginDict.WEIXINKEY.getState()</code>
<code> </code><code>+ </code><code>"&redirect_uri="</code>
<code> </code><code>+ URLEncoder.encode(ShareLoginDict.WEIXINURL.getState()) </code>
<code> </code><code>+ </code><code>"&response_type=code&scope=snsapi_login&state=66666#wechat_redirect"</code><code>);</code>
<code> </code><code>} </code><code>catch</code> <code>(IOException e) {</code>
<code> </code><code>// TODO Auto-generated catch block</code>
<code> </code><code>e.printStackTrace();</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code>@Override</code>
<code> </code><code>public</code> <code>Result userwx(String return_code) {</code>
<code> </code><code>Result result = </code><code>new</code> <code>Result();</code>
<code> </code><code>Map<String, Object> token = (Map<String, Object>) WeiXinAPI</code>
<code> </code><code>.getToken(return_code);</code>
<code> </code><code>if</code> <code>(token != </code><code>null</code> <code>&& token.get(</code><code>"access_token"</code><code>) != </code><code>null</code><code>) {</code>
<code> </code><code>Map<String, Object> user = (Map<String, Object>) WeiXinAPI</code>
<code> </code><code>.getWxUser(token.get(</code><code>"access_token"</code><code>).toString(),</code>
<code> </code><code>token.get(</code><code>"openid"</code><code>).toString());</code>
<code> </code><code>if</code> <code>(user != </code><code>null</code><code>) {</code>
<code> </code><code>result.addModel(</code><code>"openid"</code><code>, user.get(</code><code>"openid"</code><code>));</code>
<code> </code><code>result.addModel(</code><code>"nickname"</code><code>, user.get(</code><code>"nickname"</code><code>));</code>
<code> </code><code>result.addModel(</code><code>"headimgurl"</code><code>, user.get(</code><code>"headimgurl"</code><code>));</code>
<code> </code><code>result.addModel(</code><code>"data"</code><code>, </code><code>"data_success"</code><code>);</code>
<code> </code><code>}</code><code>else</code><code>{</code>
<code> </code><code>result.addModel(</code><code>"data"</code><code>, </code><code>"data_null"</code><code>);</code>
<code> </code><code>}</code>
<code> </code><code>}</code><code>else</code><code>{</code>
<code> </code><code>result.addModel(</code><code>"data"</code><code>, </code><code>"data_null"</code><code>);</code>
<code> </code><code>return</code> <code>result;</code>
当用户通过微信登录时,调用微信接口获取用户接口返回微信端的openid,昵称,头像;然后将此信息存入到浏览器的cookie中,当用户浏览其他信息时,辨别如果是用户是用微信登录的,拦截器直接从cookie中获取用户的信息显示昵称和头像,并同时判断该openid是否和数据库中用户做绑定,如果没有绑定提示用户注册。
2、qq登录
1)qq互联创建应用
接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权。
申请appid和appkey的用途
appid :应用的唯一标识。在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值。
appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,appkey的值即为oauth_consumer_secret的值。
2)查看QQ提供的接口,写java代码
36
37
38
39
40
41
<code>public</code> <code>void</code> <code>qq() {</code>
<code> </code><code>response.sendRedirect(</code><code>"https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="</code>
<code> </code><code>+ ShareLoginDict.QQKEY.getState()</code>
<code> </code><code>+ ShareLoginDict.QQURL.getState() + </code><code>"&scope=get_user_info"</code><code>);</code>
<code> </code><code>public</code> <code>Result userqq(String return_code) {</code>
<code> </code><code>Map<String, Object> token = (Map<String, Object>) QQAPI</code>
<code> </code><code>Map<String, Object> tokenme = (Map<String, Object>) QQAPI</code>
<code> </code><code>.getTokenMeOpenId(token.get(</code><code>"access_token"</code><code>).toString());</code>
<code> </code><code>if</code> <code>(tokenme != </code><code>null</code> <code>&& tokenme.get(</code><code>"openid"</code><code>) != </code><code>null</code><code>) {</code>
<code> </code><code>Map<String, Object> user = (Map<String, Object>) QQAPI</code>
<code> </code><code>.getQqUser(token.get(</code><code>"access_token"</code><code>).toString(),</code>
<code> </code><code>tokenme.get(</code><code>"openid"</code><code>).toString());</code>
<code> </code><code>if</code> <code>(user != </code><code>null</code><code>) {</code>
<code> </code><code>result.addModel(</code><code>"openid"</code><code>, tokenme.get(</code><code>"openid"</code><code>));</code>
<code> </code><code>result.addModel(</code><code>"nickname"</code><code>, user.get(</code><code>"nickname"</code><code>));</code>
<code> </code><code>result.addModel(</code><code>"figureurl"</code><code>, user.get(</code><code>"figureurl"</code><code>));</code>
<code> </code><code>result.addModel(</code><code>"data"</code><code>, </code><code>"data_success"</code><code>);</code>
<code> </code><code>}</code><code>else</code><code>{</code>
<code> </code><code>result.addModel(</code><code>"data"</code><code>, </code><code>"data_null"</code><code>);</code>
<code> </code><code>}</code>
<code> </code><code>} </code>
当用户通过QQ登录时,调用QQ接口获取用户接口返回QQ端的openid,昵称,头像;然后将此信息存入到浏览器的cookie中,当用户浏览其他信息时,辨别如果是用户是用微信登录的,拦截器直接从cookie中获取用户的信息显示昵称和头像,并同时判断该openid是否和数据库中用户做绑定,如果没有绑定提示用户注册。
3 微博登录
1)微博创建应用
2)查看微博提供的接口,写java代码
<code>public</code> <code>void</code> <code>wb() {</code>
<code> </code><code>response.sendRedirect(</code><code>"https://api.weibo.com/oauth2/authorize?client_id="</code>
<code> </code><code>+ ShareLoginDict.WEIBOKEY.getState()</code>
<code> </code><code>+ ShareLoginDict.WEIBOURL.getState()</code>
<code> </code><code>+ </code><code>"&response_type=code"</code><code>);</code>
<code> </code><code>public</code> <code>Result userwb(String return_url, String return_code) {</code>
<code> </code><code>Map<String, Object> token = (Map<String, Object>) WeiBoAPI.getToken(</code>
<code> </code><code>return_url, return_code);</code>
<code> </code><code>Map<String, Object> user = (Map<String, Object>) WeiBoAPI</code>
<code> </code><code>.getWbUser(token.get(</code><code>"access_token"</code><code>).toString(),</code>
<code> </code><code>token.get(</code><code>"uid"</code><code>).toString());</code>
<code> </code><code>result.addModel(</code><code>"name"</code><code>, user.get(</code><code>"screen_name"</code><code>));</code>
<code> </code><code>result.addModel(</code><code>"pic"</code><code>, user.get(</code><code>"avatar_large"</code><code>));</code>
<code> </code><code>result.addModel(</code><code>"idstr"</code><code>, user.get(</code><code>"idstr"</code><code>));</code>
当用户通过微博登录时,调用微博接口获取用户接口返回微博端的idstr,昵称,头像;然后将此信息存入到浏览器的cookie中,当用户浏览其他信息时,辨别如果是用户是用微信登录的,拦截器直接从cookie中获取用户的信息显示昵称和头像,并同时判断该openid是否和数据库中用户做绑定,如果没有绑定提示用户注册。
本文转自 xinsir999 51CTO博客,原文链接:http://blog.51cto.com/xinsir/1858721,如需转载请自行联系原作者