Java Web集成第三方登录
2015-11-17 12:00
453 查看
最近的项目涉及到网站的第三方登录,总结了下发现有的地方配置还是很麻烦,所以把过程贴出来供大家参考。
首先打开:
百度开放服务平台
点击右上角的:管理控制台——开发者服务管理
进入开发者服务管理后可以新建自己的工程。
建立好后如下图所示:
![](http://img.blog.csdn.net/20151117120116381?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
百度会提供一个API key和一个密钥,这个一会儿会用,先打开显示更多——社会化服务。
![](http://img.blog.csdn.net/20151117130112870?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
首先进入回调地址设置,填写第三方登录成功后的action地址:
![](http://img.blog.csdn.net/20151117130154384?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
注意这里的地址不能写成localhost,必须是127.0.0.1。
填写完成后回到上一页,打开“PC端JS组件设置”。
![](http://img.blog.csdn.net/20151117130236594?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这里可以自己设置下第三方登录的网站以及样式,设置好以后点击生成页面js代码。
![](http://img.blog.csdn.net/20151117130328697?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20151117130452148?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
下面为登陆成功后的action:
来自:http://blog.csdn.net/tryitboy/article/details/48173827
百度开发者平台
对于一般的应用,使用百度开放服务平台这样的平台提供的社会化服务即可满足用户的日常使用需要。首先打开:
百度开放服务平台
点击右上角的:管理控制台——开发者服务管理
进入开发者服务管理后可以新建自己的工程。
建立好后如下图所示:
百度会提供一个API key和一个密钥,这个一会儿会用,先打开显示更多——社会化服务。
首先进入回调地址设置,填写第三方登录成功后的action地址:
注意这里的地址不能写成localhost,必须是127.0.0.1。
填写完成后回到上一页,打开“PC端JS组件设置”。
这里可以自己设置下第三方登录的网站以及样式,设置好以后点击生成页面js代码。
<script type="text/javascript" id="bd_soc_login_boot"></script> <script type="text/javascript"> (function(){ var t = new Date().getTime(), script = document.getElementById("bd_soc_login_boot"), redirect_uri = encodeURIComponent("替换为登录成功后的url"), domid = "替换为登录组件的目标节点id", src = "http://openapi.baidu.com/social/oauth/2.0/connect/login?redirect_uri=" + redirect_uri + "&domid=" + domid + "&client_type=web&response_type=code&media_types=sinaweibo%2Cqqdenglu%2Cbaidu%2Crenren&size=-1&button_type=4&client_id=ozLMOCp1zcUE25HbRrR0UKrl&view=embedded&t=" + t; script.src = src; })(); </script>生成代码后copy到项目的登录页面即可,在登录框下新建个div节点同js保持一致。最终样式如下:
下面为登陆成功后的action:
public class SocialLogin extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); UserDao userDao = (UserDao) DaoFactory.getInstance("UserDao"); UserInfoService userInfoService = (UserInfoService) ServiceFactory .getInstance("UserInfoService"); // 接收code String code = request.getParameter("code"); // 发送post请求,根据code获取token Map<String, String> map = new HashMap<String, String>(); map.put("grant_type", "authorization_code"); map.put("code", code); map.put("client_id", "ozLMOCp1zcUE25HbRrR0UKrl"); map.put("client_secret", "a08tWipbc42UAj0ERipVNi1Npdq3Y5I8"); map.put("redirect_uri", "http://127.0.0.1/LSZ/socialLogin"); String json = HttpUtils.postForm( "https://openapi.baidu.com/social/oauth/2.0/token", map); // 令牌 String access_token = JSONObject.fromObject(json).get("access_token") .toString(); // 获取用户信息 String json2 = HttpUtils .get("https://openapi.baidu.com/social/api/2.0/user/info?access_token=" + access_token + "&"); // 用户名 String username = JSONObject.fromObject(json2).get("username") .toString(); System.out.println(username); // 唯一ID String social_uid = JSONObject.fromObject(json2).get("social_uid") .toString(); System.out.println(social_uid); /* * Boolean flag = service.getUser(Integer.parseInt(social_uid)); * System.out.println(flag); */ //下面是该项目的注册及登录方法,可以选择无视 // if (flag) { User user = new User(); user.setUsername(username); UserService userService = (UserService) ServiceFactory .getInstance("UserService"); try { Boolean isRegist = userDao.findUser(username); if (isRegist) { // 已注册直接登录 user = userService.login(username, social_uid, 1); int userType = user.getUserState(); int u_id = user.getU_id(); UserInfo userInfo = userInfoService.ser_findInfo(u_id); session.setAttribute("userInfo", userInfo); session.setAttribute("u_id", u_id); session.setAttribute("username", username); session.setAttribute("userType", userType); response.sendRedirect("index.do"); } else { // 未注册首先注册 boolean isRegist2 = userService.regist(username, social_uid, 1); // 完成注册后默认该用户已经登录 user = userService.login(username, social_uid, 1); int u_id = user.getU_id(); boolean isIntro = true; // 通过u_id自动生成一个u_info的记录,只含有u_id和i_id boolean isInfo = userInfoService.ser_newUserInfo(u_id); // 再通过u_id获得这条记录 UserInfo userInfo = userInfoService.ser_findInfo(u_id); if (isRegist2 && isInfo && (userInfo != null)) { session.setAttribute("isIntro", isIntro); session.setAttribute("userInfo", userInfo); session.setAttribute("username", username); session.setAttribute("u_id", u_id); response.sendRedirect("index.do"); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // // user.setSocial_uid(Integer.parseInt(social_uid)); // service.saveUser(user); // System.out.println("保存用户信息成功"); // } else { // User user = service.getUser2(social_uid); // System.out.println("读取用户信息成功"); // } } }在第三方登录的时候会生成一个social_uid,唯一,用来验证用户,该social_uid可以存在用户表中单独一列,让用户登录后重新设置密码,也可以将该social_uid直接设置为密码,但以后登录时只能使用第三方。
来自:http://blog.csdn.net/tryitboy/article/details/48173827
相关文章推荐
- Java代码为hbase表添加数据
- 校验数字签名防止 apk 被二次打包 - Java层校验(大众点评为例)
- Java代码探查hbase表结构及数据
- java存储时间date到mysql的datetime格式的方法
- JAVA Map List Set 的contans 方法
- java中字节流总结
- java 两种方式实现字符串倒叙排列
- Java基础之Json数据的操作
- Java中不规则二维数组运用
- Spring MVC配置response自动转json
- Java:单例模式的七种写法
- 配置MyEclipse Maven环境
- JAVA之日期格式
- 深入浅出 Java 8 Lambda 表达式
- java 类加载器ClassLoader详解(二)——获取资源(getResource)
- Spring事务配置的五种方式
- Java的abstract基本要点
- JavaEE中一些缩写的含义
- 深入浅出 Java 8 Lambda 表达式
- Spring Mybatis log4j 在日志文件中显示sql日志