chenxz 7 éve
szülő
commit
41f1ab1f99

+ 8 - 4
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/WechatController.java

@@ -111,12 +111,13 @@ public class WechatController extends BaseController {
     }
 
     @RequestMapping(value = UrlConstants.API_WECHAT + "login",method = RequestMethod.GET)
-    public UserWechatDTO login(@RequestParam(value = "code")String code){
-        return wechatLogic.wxLogin(code);
+    public String login(@RequestParam(value = "code")String code,HttpServletResponse response,HttpServletRequest request)throws Exception{
+        response.setHeader("Content-Type","x-javascript");
+        return wechatLogic.wxLogin(code,request);
     }
 
     @RequestMapping(value = UrlConstants.API_WECHAT + "user",method = RequestMethod.PUT)
-    public UserVO bind(@RequestBody UserWechatDTO wechatDTO){
+    public boolean bind(@RequestBody UserWechatDTO wechatDTO){
         return wechatLogic.bind(wechatDTO);
     }
 
@@ -128,6 +129,9 @@ public class WechatController extends BaseController {
     @RequestMapping(value = UrlConstants.API_WECHAT + "test",method = RequestMethod.GET)
     public String test(HttpServletResponse response, @RequestParam(value = "code")String code){
         response.setHeader("Content-Type","x-javascript");
-        return "<html><head><script>window.opener.location='http://www.mooctest.net/login2?code="+code+"';window.top.close();</script></head><body></body></html>";
+        return "<html><head><script>"+
+                "localStorage.setItem('user',)"+
+                "window.opener.location='http://www.mooctest.net/user/main';window.top.close();"+
+                "</script></head><body></body></html>";
     }
 }

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/Bug2CaseVO.java

@@ -1,11 +1,13 @@
 package cn.iselab.mooctest.site.web.data;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonInclude;
 
 /**
  * created by zsj in 15:32 2018/2/28
  **/
 @JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties
 public class Bug2CaseVO {
 
     private Long id;

+ 5 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/PermissionVO.java

@@ -65,4 +65,9 @@ public class PermissionVO {
     public void setType(String type) {
         this.type = type;
     }
+
+    @Override
+    public String toString(){
+        return this.resource+":"+this.operation;
+    }
 }

+ 3 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/UserVO.java

@@ -1,5 +1,7 @@
 package cn.iselab.mooctest.site.web.data;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -51,6 +53,7 @@ public class UserVO extends BaseVO {
 
     private Boolean manualCheckValid;
 
+    @JsonIgnore
     private Integer availability;
 
     public Long getId() {

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/WechatLogic.java

@@ -43,9 +43,9 @@ public interface WechatLogic {
 
     String getWorkerContests(HttpServletRequest request);
 
-    UserWechatDTO wxLogin(String code);
+    String wxLogin(String code,HttpServletRequest request)throws Exception;
 
-    UserVO bind(UserWechatDTO dto);
+    boolean bind(UserWechatDTO dto);
 
     UserVO register(UserWechatDTO dto);
 }

+ 51 - 6
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/WechatLogicImpl.java

@@ -2,19 +2,27 @@ package cn.iselab.mooctest.site.web.logic.impl;
 
 import cn.iselab.mooctest.rpc.user.data.UserDTO;
 import cn.iselab.mooctest.rpc.user.data.UserWechatDTO;
+import cn.iselab.mooctest.rpc.user.data.WechatUserInfoDTO;
 import cn.iselab.mooctest.site.configure.realm.DefaultUsernamepasswordToken;
 import cn.iselab.mooctest.site.data.UserDTOForMT;
 import cn.iselab.mooctest.site.models.AssignedTask;
 import cn.iselab.mooctest.site.models.ContestMentorAssignedTask;
+import cn.iselab.mooctest.site.models.Permission;
 import cn.iselab.mooctest.site.rpc.user.WeChatService;
 import cn.iselab.mooctest.site.service.*;
 import cn.iselab.mooctest.site.service.application.WechatService;
 import cn.iselab.mooctest.site.util.data.EncryptionUtil;
+import cn.iselab.mooctest.site.web.data.PermissionVO;
 import cn.iselab.mooctest.site.web.data.UserVO;
 import cn.iselab.mooctest.site.web.data.internal.ContestResultVO;
 import cn.iselab.mooctest.site.web.data.internal.JoinGroupWechatVO;
+import cn.iselab.mooctest.site.web.logic.MenuLogic;
+import cn.iselab.mooctest.site.web.logic.UserLogic;
 import cn.iselab.mooctest.site.web.logic.WechatLogic;
+import cn.iselab.mooctest.site.web.util.Converter;
+import com.google.gson.Gson;
 import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.AccountException;
 import org.apache.shiro.subject.Subject;
 import org.json.JSONArray;
 import org.json.JSONObject;
@@ -22,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
+import java.net.URLEncoder;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -45,6 +54,18 @@ public class WechatLogicImpl implements WechatLogic {
     User2RoleService user2RoleService;
     @Autowired
     WeChatService weChatRpcService;
+    @Autowired
+    private UserLogic userLogic;
+    @Autowired
+    private RecordService recordService;
+    @Autowired
+    private OpenId2UserIdService openId2UserIdService;
+    @Autowired
+    private MenuLogic menuLogic;
+    @Autowired
+    private ManagerPropertyService managerPropertyService;
+    @Autowired
+    private PermissionService permissionService;
 
     public static final int HTTP_OK = 200;
     private static final int HTTP_INTERNAL_ERROR = 500;
@@ -395,24 +416,48 @@ public class WechatLogicImpl implements WechatLogic {
     }
 
     @Override
-    public UserWechatDTO wxLogin(String code){
+    public String wxLogin(String code,HttpServletRequest request)throws Exception{
         UserWechatDTO wechatDTO=weChatRpcService.loginByCode(code);
         if(wechatDTO.getType()==UserWechatDTO.OLD){
             UserDTO userDTO=wechatDTO.getUser();
             DefaultUsernamepasswordToken token = new DefaultUsernamepasswordToken(userDTO.getEmail(),
-                    EncryptionUtil.encryptMD5(userDTO.getPassword()));
+                    userDTO.getPassword());
             token.setLoginType("email&mobile");
             Subject currentUser = SecurityUtils.getSubject();
             currentUser.login(token);
+            UserVO userVO= Converter.convert(UserVO.class,userDTO);
+            if (userVO.getAvailability() != 1) {
+                return "<html><head></head><body>非法用户,请重新登录或者联系管理员!</body></html>";
+            }
+            if (user2RoleService.getByUserId(userVO.getId()).size() == 0) {
+                userLogic.adapUsertoEnterprise(userVO);
+            }
             SecurityUtils.getSubject().getSession().setAttribute("userId", userDTO.getId());
+
+            recordService.recordLoginAction(request, userVO.getId());
+            userVO.setMenuVOs(menuLogic.getMenuListByUserId(userVO.getId()));
+            userVO.setOpenId(openId2UserIdService.findOpenIdByUserId(userVO.getId()));
+
+            List<Permission> permissions=permissionService.findByUserId(userDTO.getId());
+            System.out.println(new Gson().toJson(userVO).toString());
+            return "<html><head><script>"+
+                    "localStorage.setItem('permissionSet','"+new Gson().toJson(permissions.stream().map(p-> p.toString()).collect(Collectors.toList())).toString()
+                    +"');"+ "localStorage.setItem('user','"+new Gson().toJson(userVO).toString()+"');"+
+                    "window.opener.location='http://www.mooctest.net/user/main';window.top.close();"+
+                    "</script></head><body></body></html>";
+        }else{
+            WechatUserInfoDTO userInfoDTO=wechatDTO.getUserInfo();
+            return "<html><head><script>"+
+                    "localStorage.setItem('wechatInfo','"+new Gson().toJson(userInfoDTO).toString()+"');"+
+                    "window.opener.location='http://www.mooctest.net/wechatLogin';window.top.close();"+
+                    "</script></head><body></body></html>";
         }
-        return wechatDTO;
     }
 
     @Override
-    public UserVO bind(UserWechatDTO dto){
-        UserVO userVO=new UserVO();
-        return userVO;
+    public boolean bind(UserWechatDTO dto){
+        weChatRpcService.setUserWechat(dto);
+        return true;
     }
 
     @Override