`
dengzhouit
  • 浏览: 13330 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Spring MVC实现QQ第三方登录

阅读更多

首先得申请相应的应用 ID和key值。地址 是:http://connect.qq.com/intro/login/

 

下面是登录过程演示如图:

QQ登录

然后点击登录如下图所示:

QQ登录

 

这已经是地个绑定好关联账号的登录了。那么我们怎么用Spring mvc实现呢?

code
1
2
3
4
5
6
7
8
9
10
11
12
/**
* qq登录页面
* @param session
* @param map
* @return
* @throws IOException
*/
@RequestMapping("qq/login")
public String qqLoginUrl(HttpSession session,ModelMap map) throws IOException{
OauthConfig oc=oauthService.getOauthConfig("qq");
return "redirect:"+String.format("%s?response_type=code&client_id=%s&redirect_uri=%s",oc.getAuthorizeUrl(),oc.getClientId(),oc.getRedirectUri());
}

这是一个验证过程,需要qq的authorize url和client_id以及跳转地址redirecturi。authorize url地址的参数是什么,详细请看qq登录的第三方API文档那里有地址。client_id这个是你申请后有的。跳转地址这个重要,如果在没有绑定账号情况下需要跳转到邦定的页面如图:

QQ绑定页面

我这里做了注册绑定和已有账号绑定,所以需要提供2种情况。下面看验证过程代码。

 

code
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/**
* qq登录数据验证
* @param code
* @param map
* @param session
* @param request
* @return
*/
@SuppressWarnings("unchecked")
@RequestMapping("qq/authorizationCode")
public String qqAuthorizationCode(String code,ModelMap map,HttpSession session,HttpServletRequest request){
if(session.getAttribute("openId")==null){
OauthConfig oc=oauthService.getOauthConfig("qq");
//String clientId=systemConfigService.getByVarName("cms_qqClientId", 0).getValue();
//String suffix=systemConfigService.getByVarName("core_dynamicSuffix", 0).getValue();
String url=String.format("%s?grant_type=authorization_code&client_id=%s&client_secret=%s&code=%s&state=%s&redirect_uri=%s",oc.getTokenUrl(),oc.getClientId(),oc.getClientSecret(),code,UUID.randomUUID().toString(),oc.getRedirectUri());
DefaultHttpClient httpclient = HttpClientUtils.getHttpClient();
Map<String,String> obj=null;
//String client_id=null;
String openid=null;
try {
String request_token = HttpClientUtils.getHtml(httpclient, url, "UTF-8");
System.out.println(request_token);
// if(request_token.indexOf("\"error\"")>=0){
// return "redirect:login"+suffix;
// }
HashMap<String, String> access_token = ParseString.parseTokenString(request_token);
String url2=String.format("%s?access_token=%s",oc.getMeUrl(),access_token.get("access_token"));
String s = HttpClientUtils.getHtml(httpclient, url2, "UTF-8");
openid=s.substring(s.indexOf("\"openid\":\"")+10,s.indexOf("\"}"));
String url3=String.format("https://graph.qq.com/user/get_user_info?access_token=%s&oauth_consumer_key=%s&openid=%s",access_token.get("access_token"),oc.getClientId(),openid);
System.out.println(HttpClientUtils.getHtml(httpclient, url3, "UTF-8"));
obj=JsonUtil.conventJsonToObject(HttpClientUtils.getHtml(httpclient, url3, "UTF-8"), Map.class);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// if(qqObj.getRet()!=0){
// throw new MessageException(300,"出现异常新重新登陆");
// }
map.addAttribute("w",webConfigDAO.findById("1"));
if(oauthService.getByOpenId(openid,1)!=null){
try {
if(oauthService.oauthLogin(openid,1, session,request)){
return "/WEB-INF/cms/system/member/loginCallback.html";
}
} catch (MessageException e) {
// TODO Auto-generated catch block
e.printStackTrace();
map.addAttribute("msg", e.getMessage());
return"/WEB-INF/cms/system/member/memberError.html";
}
}
session.setAttribute("openId", openid);
session.setAttribute("loginType", 1);
session.setAttribute("userInfo",new String[]{obj.get("nickname"),obj.get("gender"),obj.get("figureurl_1"),obj.get("figureurl_2")});
}else{
session.removeAttribute("openId");
session.removeAttribute("loginType");
session.removeAttribute("userInfo");
}
return "/WEB-INF/cms/system/member/oauthPage.html";
}

用DefaultHttpClient类进行访问验证的页面,我们需要以下参数

 

 

Step1:获取Authorization Code

 

如果用户成功登录并授权,则会跳转到指定的回调地址,并在redirect_uri地址后带上Authorization Code和原始的state值

 

Step2:通过Authorization Code获取Access Token

 

这里是参数,大家可以结合上面的代码分析。

如果成功返回,即可在返回包中获取到Access Token。
返回如下字符串:access_token=FE04************************CCE2&expires_in=7776000&state=test 。

上面的代码url3主要是获取key和value存到map对你里面。然后通过freemarker框架来调用从qq那里得到的数据展示到页面。

那我们的数据库设计呢,我们只需要下面几个就行。

只需要一个qq返回的一个唯一ID值存到数据库然后在存会员的ID即可完成邦定。通过ID找到会员ID,在通过会员ID找到相应的会员。

好了教程就说到这里,有不懂的可以下载微骏CMS查看相应的代码以及数据库脚本。

登录表的结构如下:http://www.vijun.com/reference/vj_database/table/vj_oauth.html

分享到:
评论

相关推荐

    Java 第三方登录demo QQ 微信

    4. **第三方登录API集成**:QQ和微信都提供了开放平台API,允许开发者通过OAuth2.0授权协议实现第三方登录。项目中,开发者需要注册应用,获取AppID和AppKey,然后在用户同意授权后,通过这些ID和Key获取到用户的...

    Spring MVC的所有jar包

    在处理请求的过程中,`spring-context-support`提供了对第三方库如Quartz(调度)、JMS(消息传递)和邮件服务的支持。而`spring-aop`和`spring-aspects`则是AOP相关,用于实现切面和通知,增强了代码的可维护性和可...

    第三方登录[含QQ、微信、新浪微博]

    Java开发者通常会利用Spring Security或Spring Social框架来实现第三方登录。在Spring Security中,你可以配置OAuth2客户端和服务提供者的详细信息。Spring Social则为与社交网络的API交互提供了简单易用的抽象层。 ...

    spring-mvc-qq-weibo:spring-mvn 第三方登录整合

    这篇教程“spring-mvc-qq-weibo:spring-mvn 第三方登录整合”显然关注的是如何在Spring MVC项目中整合QQ和微博的登录服务。下面将详细介绍这个过程涉及的关键知识点: 1. **Spring MVC**:Spring MVC是Spring框架的...

    spring mvc 所需架包

    这些库通常包括Spring的核心模块、Spring Web MVC模块以及其他与Web开发相关的第三方库。现在,让我们详细探讨这些关键知识点: 1. **Spring核心模块**:Spring框架的基础,提供了依赖注入(Dependency Injection, ...

    springMVC-jar包

    这个压缩包可能包括了Spring MVC本身,以及其依赖的Spring Framework其他模块和其他第三方库。 **Spring MVC 知识点:** 1. **组件解析**:Spring MVC的核心组件包括DispatcherServlet、Controller、ViewResolver...

    oauth2.0第三方 qq、sina、baidu、renren、osc、豆瓣 等,登陆的简易封装!

    在Web应用开发中,OAuth2.0常被用来实现社交网络平台(如QQ、新浪、百度、人人网、OSC开源中国、豆瓣等)的第三方登录功能。这种登录方式被称为“单点登录”或“统一认证”,因为它允许用户通过一个账号登录多个关联...

    通用后台管理系统(ExtJS 5.1 + Hibernate 4.1.7 + Spring MVC 3.2.8).pdf

    报表统计部分,可以嵌入第三方报表工具,增强数据分析能力。系统还集成了开源的互动地图库Leaflet,用于处理自定义在线地图,增强了地理信息的展示效果。 总的来说,这个通用后台管理系统是一个功能全面、技术先进...

    springboot+springmvc+第三方登陆+多数据源+druid+mysql+定时任务+代码生成例子

    在本项目中,我们主要探讨的是基于Spring Boot 2、Spring MVC和第三方登录集成的现代化Web应用程序开发。这个实例还涵盖了多数据源处理、Druid数据连接池、MySQL数据库、定时任务以及代码生成器,旨在提供一个高效且...

    java SSM整合 qq登入

    这个过程涉及到网络请求,通常可以使用HttpURLConnection或者第三方库如OkHttp来完成。获取到Access Token后,可以调用腾讯提供的API获取用户信息,如openid,昵称,头像等。这些信息可以存储在数据库中,用于后续的...

    基于Spring的在线购物商城

    支付处理可能涉及第三方支付接口的集成,如支付宝或微信支付,这部分需要处理好安全性与合规性问题。 在系统设计时,我们可以采用MVC(Model-View-Controller)架构模式,将业务逻辑、视图展示和控制逻辑分离,使得...

    基于MVC架构的网上商城

    - **支付接口**:与第三方支付平台的集成,如支付宝、微信支付。 综上所述,基于MVC架构的网上商城项目通过合理的分工,提高了代码的可读性和可维护性,同时也使得开发过程更加高效。通过选择合适的开发框架,可以...

    spring_security.zip

    例如,可以使用OAuth2 实现第三方登录,Spring Security 处理内部认证和授权。 2. **授权服务器**:Spring Security 提供OAuth2 提供者支持,可以搭建自己的授权服务器,实现令牌的颁发和验证。 3. **保护API**:在...

    spring5.2.8.zip

    在5.2.8中,这些集成得到了更新,以兼容最新的第三方版本,确保了整体项目的兼容性。 9. **文档和社区**: Spring官方文档在5.2.8版本中也进行了更新和完善,提供了详尽的教程和参考指南。同时,Spring社区活跃,...

    采用MVC设计模式的java聊天系统

    - **用户认证与授权**:系统可能使用Java Security API或第三方库如Spring Security,来处理用户的登录、注册、权限控制等。 - **消息传输**:可以使用Java的Socket编程或者基于HTTP的RESTful API实现客户端与...

    Java Spring Boot实现企业办公管理系统,模仿OA软件【优质毕业设计、课程设计项目】

    - OAuth2协议可能被用于第三方登录集成,如微信、QQ等,增强用户体验。 5. **RESTful API设计** - 采用RESTful风格设计API接口,遵循HTTP协议,使系统更符合Web服务标准,方便前后端分离开发。 6. **前端技术...

    spring-framework-4.1.6.RELEASE-dist

    - `lib` 目录:可能包含所有必需的第三方库 JAR 文件。 通过这个压缩包,开发者可以快速地在项目中引入 Spring Framework,并根据需要选择相应的模块。此外,对于学习和研究 Spring 框架的内部工作原理,源代码也是...

    Springmvc框架笔记

    1. **轻量级**:SpringMVC非常轻量,几乎不依赖其他第三方库。 2. **灵活性**:SpringMVC提供了一种灵活的方式来构建Web应用。 3. **易于测试**:SpringMVC的设计使得单元测试变得更加容易。 4. **与Spring无缝集成*...

    Spring4.3.9官方jar包.zip

    3. **spring-context.jar**:扩展了Spring的核心容器,添加了对国际化、事件传播、资源加载以及与第三方框架集成的能力。 4. **spring-aop.jar**:实现面向切面编程的模块,提供声明式事务管理和代理实现。 5. **...

Global site tag (gtag.js) - Google Analytics