Procházet zdrojové kódy

添加碧合登录和绑定接口

wangmh před 7 roky
rodič
revize
a03078f8ee

+ 49 - 0
sso-server/src/main/java/com/uas/sso/bihe/controller/BiHeController.java

@@ -0,0 +1,49 @@
+package com.uas.sso.bihe.controller;
+
+import com.uas.sso.bihe.entity.OAuthRoot;
+import com.uas.sso.controller.BaseController;
+import com.uas.sso.entity.Token;
+import com.uas.sso.entity.User;
+import com.uas.sso.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author wangmh
+ * @create 2018-07-19 10:52
+ * @desc 碧合controller
+ **/
+public class BiHeController extends BaseController {
+
+    @Autowired
+    private UserService userService;
+
+    /**
+     * 绑定微信账号
+     * @param t 微信登录失败返回的token
+     * @param username 绑定用户名
+     * @param password 绑定密码
+     * @return
+     */
+    @RequestMapping(value = "/addAccount", method = RequestMethod.POST)
+    public ModelMap addAccount(@RequestParam String t, String username, String password) {
+        Token token = tokenService.findOne(t);
+        if (token == null || token.isExpired()) {
+            return error("绑定失败");
+        }
+
+        Token unionidToken = tokenService.findOne(t);
+        if (unionidToken != null) {
+            OAuthRoot oAuthInfo = (OAuthRoot) unionidToken.getBind();
+            User user = userService.bindBhUnionId(username, password, oAuthInfo.getData().getOpenId());
+            request.getSession().setAttribute("userUU", user.getUserUU());
+        }
+
+        tokenService.delete(t);
+
+        return success();
+    }
+}

+ 2 - 2
sso-server/src/main/java/com/uas/sso/bihe/service/BiHeService.java

@@ -1,6 +1,6 @@
 package com.uas.sso.bihe.service;
 
-import com.uas.sso.bihe.entity.OAuthInfo;
+import com.uas.sso.bihe.entity.OAuthRoot;
 import com.uas.sso.bihe.entity.UserInfo;
 import org.springframework.stereotype.Service;
 
@@ -15,7 +15,7 @@ public interface BiHeService {
      * @param code
      * @return
      */
-    OAuthInfo getOAuthInfoByCode(String code);
+    OAuthRoot getOAuthInfoByCode(String code);
 
     /**
      * 获取用户信息

+ 2 - 6
sso-server/src/main/java/com/uas/sso/bihe/service/impl/BiHeServiceImpl.java

@@ -1,7 +1,6 @@
 package com.uas.sso.bihe.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.uas.sso.bihe.entity.OAuthInfo;
 import com.uas.sso.bihe.entity.OAuthRoot;
 import com.uas.sso.bihe.entity.UserInfo;
 import com.uas.sso.bihe.entity.UserRoot;
@@ -26,7 +25,7 @@ public class BiHeServiceImpl implements BiHeService {
      * @return
      */
     @Override
-    public OAuthInfo getOAuthInfoByCode(String code){
+    public OAuthRoot getOAuthInfoByCode(String code){
         String url = "https://opengwtest.bgycc.com/open/oauth/token";
         Map<String, String> map = new HashMap<>(3);
         map.put("code", code);
@@ -39,10 +38,7 @@ public class BiHeServiceImpl implements BiHeService {
             throw new VisibleError(e.getMessage());
         }
         OAuthRoot oAuthRoot = JSON.parseObject(content, OAuthRoot.class);
-        if (!OAuthRoot.Code.OK.getCode().equals(oAuthRoot.getCode())) {
-            throw new VisibleError(oAuthRoot.getMsg());
-        }
-        return oAuthRoot.getData();
+        return oAuthRoot;
     }
 
     /**

+ 47 - 0
sso-server/src/main/java/com/uas/sso/controller/LoginController.java

@@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.account.AccountConfig;
 import com.uas.sso.*;
+import com.uas.sso.bihe.entity.OAuthRoot;
+import com.uas.sso.bihe.service.BiHeService;
 import com.uas.sso.common.util.HttpUtil;
 import com.uas.sso.core.Const;
 import com.uas.sso.entity.*;
@@ -21,6 +23,7 @@ import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 
+import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.util.*;
 
@@ -72,6 +75,9 @@ public class LoginController extends BaseController {
     @Autowired
     private WeChatService weChatService;
 
+    @Autowired
+    private BiHeService biHeService;
+
     @RequestMapping(method = RequestMethod.POST)
     public ModelMap login() {
         // 获取登录信息
@@ -824,4 +830,45 @@ public class LoginController extends BaseController {
         return success(login(user.getUserUU(), appId, spaceUU, returnUrl));
     }
 
+    /**
+     * 碧合登录接口
+     * @param appId 应用id(优软云应用id)
+     * @param code 第三方获取用户信息code
+     * @return
+     */
+    @RequestMapping(value = "/bhLogin", method = RequestMethod.POST)
+    public ModelMap bhLogin(@RequestParam(defaultValue = "city") String appId, String code) {
+        // 获取用户信息
+        User user = null;
+        OAuthRoot oAuthInfo = biHeService.getOAuthInfoByCode(code);
+
+        String accessToken = Optional.ofNullable(oAuthInfo).map(OAuthRoot::getData).map(com.uas.sso.bihe.entity.OAuthInfo::getAccessToken).orElse(null);
+        if (StringUtils.isEmpty(accessToken)) {
+            Long userUU = (Long) request.getSession().getAttribute("userUU");
+            if (userUU == null) {
+                return error("验证信息过期");
+            }
+            user = new User(userUU);
+        } else {
+            user = userService.findByBhOpenId(oAuthInfo.getData().getOpenId());
+            request.getSession().setAttribute("userUU", user.getUserUU());
+        }
+
+        if (user == null) {
+            // 提示前端用户微信未绑定账号
+            Token token = new Token(oAuthInfo, oAuthInfo.getData().getExpires_in());
+            tokenService.save(token);
+            ModelMap data = new ModelMap("hasRegister", false);
+            data.put("token", token.getId());
+            return success(data);
+        }
+
+        // 登录
+        WafRequestWrapper wr = new WafRequestWrapper(request);
+        String spaceUU = wr.getParameter("spaceUU");
+        String returnUrl = wr.getParameter("returnUrl");
+        String baseUrl = wr.getParameter("baseUrl");
+        request.getSession().setAttribute("baseUrl", baseUrl);
+        return success(login(user.getUserUU(), appId, spaceUU, returnUrl));
+    }
 }

+ 6 - 1
sso-server/src/main/java/com/uas/sso/core/Type.java

@@ -61,7 +61,12 @@ public enum Type {
     /**
      * 用户绑定微信账号
      */
-    BIND_WEIXIN("BINDWEIXIN");
+    BIND_WEIXIN("BINDWEIXIN"),
+
+    /**
+     * 用户绑定微信账号
+     */
+    BIND_BIHE("BINDBIHE");
 
     private String value;
 

+ 7 - 0
sso-server/src/main/java/com/uas/sso/dao/UserDao.java

@@ -133,4 +133,11 @@ public interface UserDao extends JpaRepository<User, Long>, JpaSpecificationExec
      * @return
      */
     User findByWxUnionid(String wxUnionid);
+
+    /**
+     * 根据碧合用户openId获取用户信息
+     * @param openId 用户unionID
+     * @return
+     */
+    User findByBhOpenId(String openId);
 }

+ 14 - 0
sso-server/src/main/java/com/uas/sso/entity/User.java

@@ -158,6 +158,12 @@ public class User implements Serializable {
     @Column(name = "wx_unionid", unique = true)
     private String wxUnionid;
 
+    /**
+     * 碧合唯一id
+     */
+    @Column(name = "bh_openid", unique = true)
+    private String bhOpenId;
+
     /**
      * qq号(qq扫码或qq客户端授权,不用出现在注册页面,预留)
      */
@@ -411,6 +417,14 @@ public class User implements Serializable {
         this.wxUnionid = wxUnionid;
     }
 
+    public String getBhOpenId() {
+        return bhOpenId;
+    }
+
+    public void setBhOpenId(String bhOpenId) {
+        this.bhOpenId = bhOpenId;
+    }
+
     public Integer getQqNumber() {
         return qqNumber;
     }

+ 16 - 1
sso-server/src/main/java/com/uas/sso/service/UserService.java

@@ -329,12 +329,19 @@ public interface UserService {
     Map<String, Long> countInCurrentWeek(List<String> fromApps);
 
     /**
-     * 根据用户unionID获取用户信息
+     * 根据微信用户unionID获取用户信息
      * @param unionid 用户unionID
      * @return
      */
     User findByWxUnionid(String unionid);
 
+    /**
+     * 根据碧合用户openId获取用户信息
+     * @param openId 用户openId
+     * @return
+     */
+    User findByBhOpenId(String openId);
+
     /**
      * 微信绑定账号
      * @param username 用户名
@@ -342,4 +349,12 @@ public interface UserService {
      * @param unionid 用户微信唯一标志
      */
     User bindUnionId(String username, String password, String unionid);
+
+    /**
+     * 碧合绑定账号
+     * @param username 用户名
+     * @param password 密码
+     * @param openId 用户微信唯一标志
+     */
+    User bindBhUnionId(String username, String password, String openId);
 }

+ 25 - 0
sso-server/src/main/java/com/uas/sso/service/impl/UserServiceImpl.java

@@ -720,6 +720,11 @@ public class UserServiceImpl implements UserService {
         return userDao.findByWxUnionid(unionid);
     }
 
+    @Override
+    public User findByBhOpenId(String openId) {
+        return userDao.findByBhOpenId(openId);
+    }
+
     @Override
     public User bindUnionId(String username, String password, String unionid) {
         Assert.hasText(username, "用户名不能为空");
@@ -740,6 +745,26 @@ public class UserServiceImpl implements UserService {
         return user;
     }
 
+    @Override
+    public User bindBhUnionId(String username, String password, String openId) {
+        Assert.hasText(username, "用户名不能为空");
+        Assert.hasText(password, "密码不能为空");
+
+        User user = findByUsername(username);
+        if (user == null) {
+            throw new IllegalArgumentException("该用户不存在");
+        }
+
+        checkPassword(user.getUserUU(), password, false);
+
+        user.setBhOpenId(openId);
+        userDao.save(user);
+
+        userLogger.info(user, Type.BIND_BIHE.getValue());
+
+        return user;
+    }
+
     /**
      * 同步用户信息到各个应用
      * @param user 用户信息