فهرست منبع

新增登录接口,改成直连四维看看

houweiyu 5 سال پیش
والد
کامیت
cef49e119b

+ 3 - 0
fdkanfang-application/src/main/resources/application-dev.properties

@@ -78,3 +78,6 @@ spring.rabbitmq.port=5672
 spring.rabbitmq.username=guest
 spring.rabbitmq.password=guest
 
+#ËÄά¿´¿´µÄµÇ¼ÓòÃû
+4dkankan.host=https://test.4dkankan.com/
+

+ 4 - 0
fdkanfang-application/src/main/resources/application-sit.properties

@@ -62,3 +62,7 @@ logging.path=${output.file.path}fdkanfang_log
 logging.config=classpath:logback-spring.xml
 logging.level.com.fdkanfang=debug
 
+
+
+#ËÄά¿´¿´µÄµÇ¼ÓòÃû
+4dkankan.host=https://4dkankan.com/

+ 176 - 0
fdkanfang-common/src/main/java/com/fdkanfang/common/util/HttpClientUtil.java

@@ -0,0 +1,176 @@
+package com.fdkanfang.common.util;
+
+import lombok.extern.log4j.Log4j2;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.springframework.util.CollectionUtils;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * @author abnerhou
+ * @date 2020/5/11 17:48
+ * @desciption
+ */
+@Log4j2
+public class HttpClientUtil {
+
+    public static String doGet(String url, Map<String, String> param) {
+
+        // 创建Httpclient对象
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+
+        String resultString = "";
+        CloseableHttpResponse response = null;
+        try {
+            // 创建uri
+            URIBuilder builder = new URIBuilder(url);
+            if (param != null) {
+                for (String key : param.keySet()) {
+                    builder.addParameter(key, param.get(key));
+                }
+            }
+            URI uri = builder.build();
+
+            // 创建http GET请求
+            HttpGet httpGet = new HttpGet(uri);
+
+            // 执行请求
+            response = httpclient.execute(httpGet);
+            // 判断返回状态是否为200
+            if (response.getStatusLine().getStatusCode() == 200) {
+                resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
+            }
+        } catch (Exception e) {
+            log.error("http调用执行get出错:{}" , e);
+        } finally {
+            try {
+                if (response != null) {
+                    response.close();
+                }
+                httpclient.close();
+            } catch (IOException e) {
+               log.error("http调用执行get关闭资源出错:{}" , e);
+            }
+        }
+        return resultString;
+    }
+
+    public static String doGet(String url) {
+        return doGet(url, null);
+    }
+
+    public static String doPost(String url, Map<String, String> param) {
+        // 创建Httpclient对象
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        CloseableHttpResponse response = null;
+        String resultString = "";
+        try {
+            // 创建Http Post请求
+            HttpPost httpPost = new HttpPost(url);
+            // 创建参数列表
+            if (param != null) {
+                List<NameValuePair> paramList = new ArrayList<>();
+                for (String key : param.keySet()) {
+                    paramList.add(new BasicNameValuePair(key, param.get(key)));
+                }
+                // 模拟表单
+                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
+                httpPost.setEntity(entity);
+            }
+            // 执行http请求
+            response = httpClient.execute(httpPost);
+            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
+        } catch (Exception e) {
+            log.error("http执行post调用出错:{}" , e);
+        } finally {
+            try {
+                response.close();
+            } catch (IOException e) {
+                log.error("http执行post调用关闭资源出错:{}" , e);
+            }
+        }
+
+        return resultString;
+    }
+
+    public static String doPost(String url) {
+        return doPost(url, null);
+    }
+
+    public static String doPostJson(String url, String json) {
+        // 创建Httpclient对象
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        CloseableHttpResponse response = null;
+        String resultString = "";
+        try {
+            // 创建Http Post请求
+            HttpPost httpPost = new HttpPost(url);
+            // 创建请求内容
+            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
+            httpPost.setEntity(entity);
+            // 执行http请求
+            response = httpClient.execute(httpPost);
+            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
+        } catch (Exception e) {
+            log.error("http执行post调用出错:{}" , e);
+        } finally {
+            try {
+                response.close();
+            } catch (IOException e) {
+                log.error("http执行post调用关闭资源出错:{}" , e);
+            }
+        }
+
+        return resultString;
+    }
+
+    public static String doPostJsonWithHeader(String url, String json ,Map<String, Object> headers) {
+        // 创建Httpclient对象
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        CloseableHttpResponse response = null;
+        String resultString = "";
+        try {
+            // 创建Http Post请求
+            HttpPost httpPost = new HttpPost(url);
+            // 创建请求内容
+            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
+            httpPost.setEntity(entity);
+
+            if(!CollectionUtils.isEmpty(headers)){
+                for (Map.Entry<String,Object> entry : headers.entrySet()){
+                    httpPost.addHeader(entry.getKey() , (String) entry.getValue());
+                }
+            }
+            // 执行http请求
+            response = httpClient.execute(httpPost);
+            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
+        } catch (Exception e) {
+            log.error("http执行post调用出错:{}" , e);
+        } finally {
+            try {
+                response.close();
+            } catch (IOException e) {
+                log.error("http执行post调用关闭资源出错:{}" , e);
+            }
+        }
+
+        return resultString;
+    }
+
+}

+ 73 - 0
fdkanfang-common/src/main/java/com/fdkanfang/common/util/JsonUtils.java

@@ -0,0 +1,73 @@
+package com.fdkanfang.common.util;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.util.List;
+
+/**
+ * @author abnerhou
+ * @date 2020/5/11 17:37
+ * @desciption
+ */
+public class JsonUtils {
+
+    // 定义jackson对象
+    private static final ObjectMapper MAPPER = new ObjectMapper();
+
+    /**
+     * 将对象转换成json字符串。
+     * <p>Title: pojoToJson</p>
+     * <p>Description: </p>
+     * @param data
+     * @return
+     */
+    public static String objectToJson(Object data) {
+        try {
+            String string = MAPPER.writeValueAsString(data);
+            return string;
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 将json结果集转化为对象
+     *
+     * @param jsonData json数据
+     * @param beanType 对象中的object类型
+     * @return
+     */
+    public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
+        try {
+            T t = MAPPER.readValue(jsonData, beanType);
+            return t;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 将json数据转换成pojo对象list
+     * <p>Title: jsonToList</p>
+     * <p>Description: </p>
+     * @param jsonData
+     * @param beanType
+     * @return
+     */
+    public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
+        JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
+        try {
+            List<T> list = MAPPER.readValue(jsonData, javaType);
+            return list;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+}

+ 1 - 0
fdkanfang-dao/src/main/java/com/fdkanfang/dao/backend/provider/HouseProvider.java

@@ -90,6 +90,7 @@ public class HouseProvider {
                 "SELECT house.id, house.num, house.address, house.district_name," +
                         " house.unit_type, house.area, house.floor, house.orientation, house.status, " +
                         "house.requirement, house.handler, house.create_time, house.update_time, house.web_site, house.scene_code, " +
+                        "house.audit_result, house.can_not_edit, house.can_not_edit_desc, " +
                         "uploader.real_name as upload_name, handler.real_name as handler_name FROM " +
                         "tb_house house left join tb_user uploader " +
                         "ON  house.user_id = uploader.id left join tb_user handler " +

+ 19 - 0
fdkanfang-domain/src/main/java/com/fdkanfang/domain/dto/HouseAuditDto.java

@@ -0,0 +1,19 @@
+package com.fdkanfang.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * @author abnerhou
+ * @date 2020/7/27 15:10
+ * @desciption
+ */
+@Data
+@ApiModel(value = "房源预审请求实体" , description = "房源预审请求实体")
+public class HouseAuditDto {
+
+    private Long houseId;
+    private Integer result;
+    private String desc;
+
+}

+ 25 - 0
fdkanfang-domain/src/main/java/com/fdkanfang/domain/dto/UserLoginVo.java

@@ -0,0 +1,25 @@
+package com.fdkanfang.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * @author abnerhou
+ * @date 2020/5/20 11:57
+ * @desciption
+ */
+@Data
+@ApiModel(value = "用户登录注册实体" , description = "用户登录注册实体")
+public class UserLoginVo {
+
+    private String phoneNum;
+    private String msgAuthCode;
+    private String password;
+    private String confirmPwd;
+    private String nickName;
+    private String country;
+    private String randomcode;
+    private boolean rememberMe;
+    private String adminId;
+    private Integer type;
+}

+ 34 - 42
fdkanfang-web/src/main/java/com/fdkanfang/web/backend/HouseController.java

@@ -13,20 +13,15 @@ import com.fdkanfang.common.exception.CommonBaseException;
 import com.fdkanfang.common.model.PageDto;
 import com.fdkanfang.common.util.*;
 import com.fdkanfang.domain.backend.*;
-import com.fdkanfang.domain.dto.HouseDto;
-import com.fdkanfang.domain.dto.ImageDto;
-import com.fdkanfang.domain.dto.PanoDto;
-import com.fdkanfang.domain.dto.SceneJsonDto;
+import com.fdkanfang.domain.dto.*;
 import com.fdkanfang.domain.response.HouseResponse;
 import com.fdkanfang.domain.response.UserResponse;
 import com.fdkanfang.service.backend.*;
+import com.fdkanfang.web.backend.utils.UserUtils;
 import com.fdkanfang.web.mq.config.RabbitConfig;
 import com.fdkanfang.web.shiro.JWTUtil;
 import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.*;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authz.annotation.Logical;
@@ -85,6 +80,9 @@ public class HouseController extends BaseController {
     @Autowired
     private RoleService2 roleService;
 
+    @Autowired
+    private UserUtils userUtils;
+
 
 
 
@@ -93,15 +91,17 @@ public class HouseController extends BaseController {
     public R list(@RequestBody PageDto param){
 
         String token = getToken();
-        List userRole = JWTUtil.getUserRole(token);
-        Long userId = JWTUtil.getUserId(token);
+        // 获取用户角色
+        List<String> userRoles = userUtils.getRolesByToken(token);
+        UserEntity user  = userUtils.getUserByToken(token);
+        Long userId = user.getId();
 
-        PageInfo<HouseResponse> page = null;
-        if (userRole.contains("admin")) {
+                PageInfo<HouseResponse> page = null;
+        if (userRoles.contains("admin")) {
             page =  new PageInfo<>(houseService2.findAllBySearchKey(param, null, null));
-        }  else if (userRole.contains("edit")){
+        }  else if (userRoles.contains("edit")){
 
-            if (userRole.size() == 2) {
+            if (userRoles.size() == 2) {
                 log.info("有edit、upload权限");
                 // 有edit、upload
 //                page =  new PageInfo<>(houseService2.findAllBySearchKey(param, userId, userId));
@@ -157,7 +157,8 @@ public class HouseController extends BaseController {
         HouseEntity house = null;
         if (param.getId() == null) {
             house = new HouseEntity();
-            house.setUserId(JWTUtil.getUserId(getToken()));
+            UserEntity user  = userUtils.getUserByToken(getToken());
+            house.setUserId(user.getId());
             param.setId(null);
             BeanUtils.copyProperties(param, house);
             Integer byMaxNum = houseService2.findByMaxNum();
@@ -290,27 +291,21 @@ public class HouseController extends BaseController {
 
     @ApiOperation("预审")
     @ResponseBody
-    @GetMapping(value = "/auditHouse")
+    @PostMapping(value = "/auditHouse")
     @Transactional(rollbackFor =  Exception.class)
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "houseId", value = "房源Id", dataType = "Long"),
-            @ApiImplicitParam(name = "result", value = "审核结果: 1 通过 0 不通过", dataType = "Integer"),
-            @ApiImplicitParam(name = "desc", value = "审核描述(不通过时使用)", dataType = "String")})
-    public Result auditHouse(@RequestParam(name =  "houseId") Long houseId,
-                             @RequestParam(name =  "result") Integer result,
-                             @RequestParam(name =  "desc") String desc) {
-        if(StringUtils.isBlank(desc) || null == result || null == houseId){
+    public Result auditHouse(@RequestBody  @ApiParam(name = "用户登录注册实体", value = "传入json格式", required = true) HouseAuditDto houseAuditDto) {
+        if(StringUtils.isBlank(houseAuditDto.getDesc()) || null == houseAuditDto.getHouseId() || null == houseAuditDto.getResult()){
             throw  new CommonBaseException(ResultCodeEnum.D3001);
         }
-        HouseEntity houseEntity = houseService2.findById(houseId);
+        HouseEntity houseEntity = houseService2.findById(houseAuditDto.getHouseId());
         if(null == houseEntity){
             throw  new CommonBaseException(ResultCodeEnum.D101  , "房源不存在");
         }
-        if(result.compareTo(1) != 0 && result.compareTo(0) != 0){
+        if(houseAuditDto.getResult().compareTo(1) != 0 && houseAuditDto.getResult().compareTo(0) != 0){
             throw  new CommonBaseException(ResultCodeEnum.D101  , "审批结果格式不正确");
         }
-        houseEntity.setAuditResult(result);
-        houseEntity.setAuditDesc(desc);
+        houseEntity.setAuditResult(houseAuditDto.getResult());
+        houseEntity.setAuditDesc(houseAuditDto.getDesc());
         houseEntity.setUpdateTime(new Date());
         int update = houseService2.update(houseEntity);
         if(update != 1){
@@ -321,21 +316,17 @@ public class HouseController extends BaseController {
 
     @ApiOperation("标记不能编辑")
     @ResponseBody
-    @GetMapping(value = "/markFail")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "houseId", value = "房源Id", dataType = "Long"),
-            @ApiImplicitParam(name = "desc", value = "标记原因", dataType = "String")})
-    public Result markCannotEditHouse(@RequestParam(name =  "houseId") Long houseId,
-                             @RequestParam(name =  "desc") String desc) {
-        if(StringUtils.isBlank(desc) || null == houseId){
+    @PostMapping(value = "/markFail")
+    public Result markCannotEditHouse(@RequestBody  @ApiParam(name = "用户登录注册实体", value = "传入json格式", required = true) HouseAuditDto houseAuditDto) {
+        if(StringUtils.isBlank(houseAuditDto.getDesc()) || null == houseAuditDto.getHouseId()){
             throw  new CommonBaseException(ResultCodeEnum.D3001);
         }
-        HouseEntity houseEntity = houseService2.findById(houseId);
+        HouseEntity houseEntity = houseService2.findById(houseAuditDto.getHouseId());
         if(null == houseEntity){
             throw  new CommonBaseException(ResultCodeEnum.D101  , "房源不存在");
         }
         houseEntity.setCanNotEdit(0);
-        houseEntity.setCanNotEditDesc(desc);
+        houseEntity.setCanNotEditDesc(houseAuditDto.getDesc());
         houseEntity.setUpdateTime(new Date());
         int update = houseService2.update(houseEntity);
         if(update != 1){
@@ -373,14 +364,15 @@ public class HouseController extends BaseController {
     @GetMapping("removes/{ids}")
     public R removes(@PathVariable String ids){
 
-        List userRole = JWTUtil.getUserRole(getToken());
-        Long loginUserId = JWTUtil.getUserId(getToken());
+        List<String> userRoles = userUtils.getRolesByToken(getToken());
+        UserEntity user  = userUtils.getUserByToken(getToken());
+        Long loginUserId = user.getId();
 
 
         String roleKey = null;
         // 只有一个权限时
-        if (userRole.size() == 1) {
-            roleKey = (String)userRole.get(0);
+        if (userRoles.size() == 1) {
+            roleKey = (String)userRoles.get(0);
         }
 
         String[] split = ids.split(",");
@@ -405,7 +397,7 @@ public class HouseController extends BaseController {
                 return new R(MsgCode.e_COMMON_3002,"没有权限删除房源");
             }
 
-            if (!loginUserId.equals(houseEntity.getUserId()) && !userRole.contains("admin")) {
+            if (!loginUserId.equals(houseEntity.getUserId()) && !userRoles.contains("admin")) {
                 log.error("userId: {}, loginUserId: {}", houseEntity.getUserId(), loginUserId);
                 log.error("用户不相等时, edit,upload不能删除他人房源");
                 return new R(MsgCode.e_COMMON_3002,"没有权限删除房源");

+ 106 - 4
fdkanfang-web/src/main/java/com/fdkanfang/web/backend/IndexController.java

@@ -1,23 +1,30 @@
 package com.fdkanfang.web.backend;
 
 import cn.hutool.core.lang.Validator;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.fdkanfang.common.constant.MsgCode;
+import com.fdkanfang.common.enums.ResultCodeEnum;
+import com.fdkanfang.common.exception.CommonBaseException;
 import com.fdkanfang.common.sms.SmsService;
-import com.fdkanfang.common.util.PasswordUtils;
-import com.fdkanfang.common.util.R;
+import com.fdkanfang.common.util.*;
 import com.fdkanfang.domain.backend.UserEntity;
 import com.fdkanfang.domain.dto.LoginDto;
 import com.fdkanfang.domain.dto.RegisterDto;
+import com.fdkanfang.domain.dto.UserLoginVo;
 import com.fdkanfang.service.backend.ResourceService2;
 import com.fdkanfang.service.backend.UserService2;
 import com.fdkanfang.service.backend.dto.ResourceTree;
 import com.fdkanfang.web.aop.WebControllerLog;
+import com.fdkanfang.web.backend.utils.UserUtils;
 import com.fdkanfang.web.shiro.JWTUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
 
@@ -45,10 +52,13 @@ public class IndexController extends BaseController{
     private ResourceService2 resourceService;
 
     @Autowired
+    private UserUtils userUtils;
+
+    @Autowired
     private RedisTemplate<String, String> redisTemplate;
 
-//    @Autowired
-//    private SmsService smsService;
+    @Value("${4dkankan.host}")
+    private String KankanHost;
 
     @WebControllerLog(description = "用户管理-登录")
     @ApiOperation("登录")
@@ -101,6 +111,98 @@ public class IndexController extends BaseController{
         return new R(MsgCode.SUCCESS_CODE, result);
     }
 
+    @ApiOperation(value = "管理员登录")
+    @PostMapping(value = "user/login")
+    @ResponseBody
+    public Result userLogin(@RequestBody  @ApiParam(name = "用户登录注册实体", value = "传入json格式", required = true) UserLoginVo adminRegisterVo) {
+        if(null == adminRegisterVo){
+            throw new CommonBaseException(ResultCodeEnum.D3001);
+        }
+        if(!StringUtils.isNoneBlank(adminRegisterVo.getPhoneNum() , adminRegisterVo.getPassword())){
+            throw new CommonBaseException(ResultCodeEnum.D3001);
+        }
+        adminRegisterVo.setRandomcode("1234");
+        adminRegisterVo.setRememberMe(true);
+        String url = KankanHost + "api/sso/user/login";
+        String json = JsonUtils.objectToJson(adminRegisterVo);
+        String kankanResult = HttpClientUtil.doPostJson(url, json);
+        //解析返回结果
+        JSONObject res = JSONObject.parseObject(kankanResult);
+        log.info("四维看看返回登录数据:{}" , res.toJSONString());
+        return parseResult(res , "登录失败" , adminRegisterVo);
+    }
+
+
+    private Result parseResult(JSONObject res , String defaultFailMsg ,UserLoginVo adminRegisterVo){
+        if(null != res){
+            int code = -10;
+            if(res.containsKey("code")){
+                code = (int) res.get("code");
+            }
+            String msg = null;
+            if(res.containsKey("msg")){
+                msg = (String) res.get("msg");
+            }
+            Map<String , Object> resultMap = new HashMap<>();
+            if(0 == code){
+              log.info("用户登录成功");
+                JSONArray dataObjArray = null;
+                JSONObject dataObject = null;
+                String tokenFromKankan = "";
+                if(res.get("data") instanceof JSONArray){
+                    log.info("四维看看登录返回的data是json数组");
+                    dataObjArray = (JSONArray) res.get("data");
+                    return Result.success( msg , dataObjArray);
+                }else if(res.get("data") instanceof JSONObject){
+                    log.info("四维看看登录返回的data是json object");
+                    //登录返回的就是jsonObject
+                    dataObject = (JSONObject) res.get("data");
+                    if(null != dataObject){
+                        JSONObject user = (JSONObject) dataObject.get("user");
+                        tokenFromKankan = dataObject.getString("token");
+                        if(StringUtils.isBlank(tokenFromKankan)){
+                            throw new CommonBaseException(ResultCodeEnum.D101 , "四维看看返回的token为空");
+                        }
+                        resultMap.put("token" , tokenFromKankan);
+                        if(null == user){
+                            log.info("解析不出來user");
+                            throw new CommonBaseException(ResultCodeEnum.D101 , "解析看看返回的数据失败");
+                        }else{
+                            String nickName = (String) user.get("nickName");
+                            String userName = (String) user.get("userName");
+                            String password = (String) user.get("password");
+                            if(StringUtils.isBlank(userName)){
+                                throw new CommonBaseException(ResultCodeEnum.D101 , "看看返回用户名为空");
+                            }
+                            UserEntity dbUser = userService2.findByUserName(userName);
+                            if(null == dbUser){
+                                userUtils.addNewUserByPhone(userName , password);
+                                dbUser = userService2.findByUserName(adminRegisterVo.getPhoneNum());
+                                if(null == dbUser){
+                                    log.error("新插入的用户:{}重新捞取失败" , adminRegisterVo.getPhoneNum());
+                                    throw new CommonBaseException(ResultCodeEnum.D101 , "获取用户失败");
+                                }
+                            }else{
+                                if(!StringUtils.equals(dbUser.getRecStatus() , "A")){
+                                    log.info("用户[{}]不可用" , dbUser.getUserName());
+                                    throw new CommonBaseException(ResultCodeEnum.D101 , "用户已经不可用");
+                                }
+                            }
+                            resultMap.put("user" , dbUser);
+                        }
+                    }
+                    return Result.success( msg , resultMap);
+                }else{
+                    return Result.failure( "四维看看返回数据测试异常");
+                }
+            }else{
+                return Result.failure(msg);
+            }
+        }
+        return Result.failure(defaultFailMsg);
+    }
+
+
     @ApiOperation("退出")
     @GetMapping("admin/logout")
     public R logout() {

+ 8 - 3
fdkanfang-web/src/main/java/com/fdkanfang/web/backend/UserController.java

@@ -11,6 +11,7 @@ import com.fdkanfang.domain.response.UserResponse;
 import com.fdkanfang.service.backend.RoleService2;
 import com.fdkanfang.service.backend.UserService2;
 import com.fdkanfang.web.aop.WebControllerLog;
+import com.fdkanfang.web.backend.utils.UserUtils;
 import com.fdkanfang.web.shiro.JWTUtil;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
@@ -47,6 +48,9 @@ public class UserController extends BaseController {
     public RoleService2 roleService2;
 
     @Autowired
+    private UserUtils userUtils;
+
+    @Autowired
     public RedisTemplate<Object, Object> redisTemplate;
 
 
@@ -245,7 +249,8 @@ public class UserController extends BaseController {
     @GetMapping("checkRole")
     public R checkRole() {
         // 获取用户角色
-        Long userId = JWTUtil.getUserId(getToken());
+        UserEntity user  = userUtils.getUserByToken(getToken());
+        Long userId = user.getId();
 
         String redisKey = roleskey + userId;
 
@@ -264,8 +269,8 @@ public class UserController extends BaseController {
 
     @RequiresRoles(value = {"admin"}, logical = Logical.OR)
     @ApiOperation("用户角色授权,roleId:用逗号隔开")
-    @GetMapping("accredit/{id}/{roleIds}")
-    public R accredit(@PathVariable Long id, @PathVariable String roleIds) {
+    @GetMapping("accredit/{id}")
+    public R accredit(@PathVariable Long id, @RequestParam(name = "roleIds")  String roleIds) {
 
         // 先删除用户角色表,再添加,不然会出错;
         userService2.deleteUserRoleByUserId(id);

+ 81 - 0
fdkanfang-web/src/main/java/com/fdkanfang/web/backend/utils/UserUtils.java

@@ -0,0 +1,81 @@
+package com.fdkanfang.web.backend.utils;
+
+import com.fdkanfang.common.enums.ResultCodeEnum;
+import com.fdkanfang.common.exception.CommonBaseException;
+import com.fdkanfang.domain.backend.UserEntity;
+import com.fdkanfang.service.backend.UserService2;
+import com.fdkanfang.web.shiro.JWTUtil;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import sun.nio.cs.US_ASCII;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author abnerhou
+ * @date 2020/7/27 16:40
+ * @desciption
+ */
+@Service
+@Log4j2
+public class UserUtils {
+
+    @Autowired
+    UserService2 userService2;
+
+    public List<String> getRolesByToken(String token){
+        if(StringUtils.isBlank(token)){
+            log.warn("token为空,无法获取token对应的用户的权限");
+            return null;
+        }
+        String userName = JWTUtil.getUserName(token);
+        UserEntity user = userService2.findByUserName(userName);
+        if(null == user){
+            throw new CommonBaseException(ResultCodeEnum.D101 , "用户不存在");
+        }
+        // 获取用户角色
+        Set<String> roles = userService2.findRoleByUserId(user.getId());
+        return new ArrayList<>(roles);
+    }
+
+    public UserEntity getUserByToken(String token){
+        if(StringUtils.isBlank(token)){
+            log.warn("token为空,无法获取token对应的用户限");
+            return null;
+        }
+        String userName = JWTUtil.getUserName(token);
+        UserEntity user = userService2.findByUserName(userName);
+        if(null == user){
+            throw new CommonBaseException(ResultCodeEnum.D101 , "用户不存在");
+        }
+       return user;
+    }
+
+    public int  addNewUserByPhone(String phoneNum , String password){
+        if(StringUtils.isBlank(phoneNum)){
+            return -1;
+        }
+        UserEntity userEntity = new UserEntity();
+        userEntity.setUserName(phoneNum);
+        userEntity.setPhone(phoneNum);
+        userEntity.setRealName(phoneNum);
+        if(StringUtils.isNotBlank(password)){
+            userEntity.setPassword(password);
+        }
+        userEntity.setRecStatus("A");
+        userEntity.setCreateTime(new Date());
+        userEntity.setUpdateTime(new Date());
+        int insert = userService2.save(userEntity);
+        if(insert != 1){
+            throw new CommonBaseException(ResultCodeEnum.D101 , "新增用户失败");
+        }
+        return 1;
+    }
+
+
+}

+ 19 - 5
fdkanfang-web/src/main/java/com/fdkanfang/web/shiro/JWTUtil.java

@@ -1,12 +1,10 @@
 package com.fdkanfang.web.shiro;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONPObject;
 import com.auth0.jwt.JWT;
 import com.auth0.jwt.JWTVerifier;
 import com.auth0.jwt.algorithms.Algorithm;
 import com.auth0.jwt.exceptions.JWTDecodeException;
-import com.auth0.jwt.interfaces.Claim;
 import com.auth0.jwt.interfaces.DecodedJWT;
 import lombok.extern.log4j.Log4j2;
 
@@ -54,13 +52,29 @@ public class JWTUtil {
     public static Map getTokenUserInfo(String token) {
         try {
             DecodedJWT jwt = JWT.decode(token);
-            String payload = jwt.getClaim("payload").asString();
-
-            return (Map) JSON.parse(payload);
+//            String payload = jwt.getClaim("payload").asString();
+            String userName = jwt.getClaim("userName").asString();
+            Map<String  , Object> payload = new HashMap<>();
+            payload.put("userName" , userName);
+            return payload;
         } catch (JWTDecodeException e) {
             return null;
         }
     }
+    /**
+     * 获得token中的信息无需secret解密也能获得
+     *
+     * @return token中包含的用户名
+     */
+    public static String getUsername(String token) {
+        try {
+            DecodedJWT jwt = JWT.decode(token);
+            return jwt.getClaim("userName").asString();
+        } catch (JWTDecodeException e) {
+            return null;
+        }
+    }
+
 
     /**
      * 生成签名,5min后过期

+ 39 - 38
fdkanfang-web/src/main/java/com/fdkanfang/web/shiro/MyRealm.java

@@ -1,6 +1,9 @@
 package com.fdkanfang.web.shiro;
 
+import com.alibaba.fastjson.JSONObject;
+import com.fdkanfang.common.enums.ResultCodeEnum;
 import com.fdkanfang.common.exception.JwtAuthenticationException;
+import com.fdkanfang.common.util.HttpClientUtil;
 import com.fdkanfang.domain.backend.UserEntity;
 import com.fdkanfang.service.backend.ResourceService2;
 import com.fdkanfang.service.backend.UserService2;
@@ -14,6 +17,7 @@ import org.apache.shiro.authz.SimpleAuthorizationInfo;
 import org.apache.shiro.realm.AuthorizingRealm;
 import org.apache.shiro.subject.PrincipalCollection;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
@@ -38,6 +42,9 @@ public class MyRealm extends AuthorizingRealm {
     @Autowired
     private ResourceService2 resourceService2;
 
+    @Value("${4dkankan.host}")
+    private String KankanHost;
+
 
 
     /**
@@ -60,23 +67,11 @@ public class MyRealm extends AuthorizingRealm {
 
         SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
 
-//        Map<String, Set<String>> resultMap = getRole(dbUser);
-//        Set<String> rolekeys = resultMap.get("role");
 
         Set<String> rolekeys  = userService2.findRoleByUserId(dbUser.getId());
 
 
-        // 获取用户权限
-//        Set<String> permissions = new HashSet<>();
-//        try {
-//            List<Resource> userPermissionList = resourceService.getResourcesByUserPermission(dbUser);
-//            for (Resource i : userPermissionList) {
-//                permissions.add(i.getResourceKey());
-//            }
-//
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
+
 
         Set<String>  permissions = resourceService2.findResourceKeyByUserId(dbUser.getId());
 
@@ -87,26 +82,6 @@ public class MyRealm extends AuthorizingRealm {
     }
 
     /**
-     * 获取角色相关信息
-     */
-//    private Map<String, Set<String>> getRole(User user){
-//
-//        Set<BigInteger> roleIds = userService.findUserRoleByUserId(user.getId());
-//        Set<String> roleKeys = new HashSet<>();
-//        for (BigInteger i : roleIds) {
-//            Role dbRole = roleService.findById(i.longValue());
-//            roleKeys.add(dbRole.getRoleKey());
-//        }
-//
-//        HashMap<String, Set<String>> resultMap = new HashMap<>();
-//        resultMap.put("role", roleKeys);
-//
-//        return resultMap;
-//    }
-
-
-
-    /**
      * 默认使用此方法进行用户名正确与否验证,错误抛出异常即可。
      */
     @Override
@@ -130,21 +105,47 @@ public class MyRealm extends AuthorizingRealm {
             throw new JwtAuthenticationException(5001, "User didn't existed!");
         }
 
-        // 校验请求token是否跟redis token一致
-        String redisToken = redisTemplate.opsForValue().get(user.getUserName());
+        // 校验请求token是否跟redis token一致 TODO:改成从看看中获取token
+        validateToken(token);
+
+       /* String redisToken = redisTemplate.opsForValue().get(user.getUserName());
         if (!token.equals(redisToken)) {
             log.error("error token redis");
             throw new JwtAuthenticationException(5001, "token invalid");
 
-        }
+        }*/
 
 
-        if (! JWTUtil.verify(token, username, user.getPassword())) {
+     /*   if (! JWTUtil.verify(token, username, user.getPassword())) {
             log.error("error token username or password");
             throw new JwtAuthenticationException(5001, "token invalid");
-        }
+        }*/
 
 
         return new SimpleAuthenticationInfo(token, token, "my_realm");
     }
+
+    private void validateToken(String token) {
+        String url = KankanHost + "api/sso/user/checkToken";
+        log.info("验证token的url:{}",url);
+        Map<String , Object> headers = new HashMap<>();
+        headers.put("token" , token);
+        String kankanResult = HttpClientUtil.doPostJsonWithHeader(url, ""  , headers);
+        //把信息封装为json
+        JSONObject res = JSONObject.parseObject(kankanResult);
+        if(null != res){
+            log.info("登录态校验接口返回:{}", res.toJSONString());
+            int code = -10;
+            if(res.containsKey("code")){
+                code = (int) res.get("code");
+                if(code != 0){
+                    throw new JwtAuthenticationException(ResultCodeEnum.D3002.getCode() , ResultCodeEnum.D3002.getDesc());
+                }
+            }else{
+                throw new JwtAuthenticationException(ResultCodeEnum.D3002.getCode() , ResultCodeEnum.D3002.getDesc());
+            }
+        }
+        log.info("验证token完成");
+
+    }
 }

+ 1 - 0
fdkanfang-web/src/main/java/com/fdkanfang/web/shiro/ShiroConfig.java

@@ -74,6 +74,7 @@ public class ShiroConfig {
 //        filterRuleMap.put("/logout", "anon");
 //        filterRuleMap.put("/admin", "anon");
         filterRuleMap.put("/admin/login", "anon");
+        filterRuleMap.put("/user/login", "anon");
         filterRuleMap.put("/test/**", "anon");