JavaWeb应用下的第三方登录

最近的项目涉及到网站的第三方登录,总结了下发现有的地方配置还是很麻烦,所以把过程贴出来供大家参考。

百度开发者平台

对于一般的应用,使用百度开放服务平台这样的平台提供的社会化服务即可满足用户的日常使用需要。 首先打开: 百度开放服务平台 点击右上角的:管理控制台——开发者服务管理 进入开发者服务管理后可以新建自己的工程。 建立好后如下图所示:

百度会提供一个API key和一个密钥,这个一会儿会用,先打开显示更多——社会化服务。

首先进入回调地址设置,填写第三方登录成功后的action地址:

注意这里的地址不能写成localhost,必须是127.0.0.1。 填写完成后回到上一页,打开“PC端JS组件设置”。

这里可以自己设置下第三方登录的网站以及样式,,设置好以后点击生成页面js代码。

=><script type=”text/javascript”>(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:

{(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {HttpSession session = request.getSession();UserDao userDao = (UserDao) DaoFactory.getInstance(“UserDao”);UserInfoService userInfoService = (UserInfoService) ServiceFactory.getInstance(“UserInfoService”);// 接收codeString code = request.getParameter(“code”);// 发送post请求,根据code获取tokenMap<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);// 唯一IDString 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_idboolean 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 blocke.printStackTrace();}}}

在第三方登录的时候会生成一个social_uid,唯一,用来验证用户,该social_uid可以存在用户表中单独一列,让用户登录后重新设置密码,也可以将该social_uid直接设置为密码,但以后登录时只能使用第三方。

不必在乎目的地,在乎的是沿途的风景以及看风景的心情,让心灵去旅行!

JavaWeb应用下的第三方登录

相关文章:

你感兴趣的文章:

标签云: