傅行帆 5 anni fa
parent
commit
86c9d8034d

+ 20
- 0
src/main/java/com/huiju/estateagents/interceptor/AccessInterceptor.java Vedi File

@@ -15,6 +15,7 @@ import com.huiju.estateagents.entity.SysButtonInMenu;
15 15
 import com.huiju.estateagents.entity.TaRoleButton;
16 16
 import com.huiju.estateagents.service.ISysButtonInMenuService;
17 17
 import com.huiju.estateagents.service.ITaRoleButtonService;
18
+import com.huiju.estateagents.third.service.ITaThirdPartyMiniappConfigService;
18 19
 import io.jsonwebtoken.*;
19 20
 import org.springframework.beans.factory.annotation.Autowired;
20 21
 import org.springframework.stereotype.Component;
@@ -44,6 +45,9 @@ public class AccessInterceptor implements HandlerInterceptor {
44 45
     @Autowired
45 46
     private ITaButtonUriMapService taButtonUriMapService;
46 47
     
48
+    @Autowired
49
+    private ITaThirdPartyMiniappConfigService taThirdPartyMiniappConfigService;
50
+    
47 51
     private String[] whiteList = {
48 52
             "/wx/chat", // 聊天暂时不鉴权
49 53
             "/api/wx/login",
@@ -83,6 +87,22 @@ public class AccessInterceptor implements HandlerInterceptor {
83 87
 
84 88
     @Override
85 89
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
90
+        //第三方权限校验
91
+        String tokenHeader = request.getHeader("x-token");
92
+        if (!StringUtils.isEmpty(tokenHeader)){
93
+            String appidHeader = request.getHeader("x-appid");
94
+            String nowHeader = request.getHeader("x-time");
95
+            String thirdState = taThirdPartyMiniappConfigService.checkToken(tokenHeader,appidHeader,nowHeader);
96
+            if (thirdState.equals("success")){
97
+                return true;
98
+            }
99
+    
100
+            ResponseBean resp = ResponseBean.error(thirdState , ResponseBean.ERROR_AUTH_FAIL);
101
+            response.addHeader("Content-type", "application/json");
102
+            response.getOutputStream().write(JSONObject.toJSONBytes(resp));
103
+            return false;
104
+        }
105
+        
86 106
         // 白名单跳过
87 107
         if (inWhiteList(request)) {
88 108
             return true;

+ 149
- 0
src/main/java/com/huiju/estateagents/third/controller/TaThirdPartyMiniappConfigController.java Vedi File

@@ -0,0 +1,149 @@
1
+package com.huiju.estateagents.third.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.third.entity.TaThirdPartyMiniappConfig;
9
+import com.huiju.estateagents.third.service.ITaThirdPartyMiniappConfigService;
10
+import org.slf4j.Logger;
11
+import org.slf4j.LoggerFactory;
12
+import org.springframework.beans.factory.annotation.Autowired;
13
+import org.springframework.web.bind.annotation.PathVariable;
14
+import org.springframework.web.bind.annotation.RequestBody;
15
+import org.springframework.web.bind.annotation.RequestMapping;
16
+import org.springframework.web.bind.annotation.RequestMethod;
17
+import org.springframework.web.bind.annotation.RequestParam;
18
+import org.springframework.web.bind.annotation.ResponseBody;
19
+import org.springframework.web.bind.annotation.RestController;
20
+
21
+/**
22
+ * <p>
23
+    *   前端控制器
24
+    * </p>
25
+ *
26
+ * @author jobob
27
+ * @since 2019-10-17
28
+ */
29
+@RestController
30
+@RequestMapping("/")
31
+public class TaThirdPartyMiniappConfigController extends BaseController {
32
+
33
+    private final Logger logger = LoggerFactory.getLogger(TaThirdPartyMiniappConfigController.class);
34
+
35
+    @Autowired
36
+    public ITaThirdPartyMiniappConfigService iTaThirdPartyMiniappConfigService;
37
+
38
+
39
+    /**
40
+     * 分页查询列表
41
+     * @param pageNum
42
+     * @param pageSize
43
+     * @return
44
+     */
45
+    @RequestMapping(value="/taThirdPartyMiniappConfig",method= RequestMethod.GET)
46
+    public ResponseBean taThirdPartyMiniappConfigList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
47
+                                                      @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
48
+        ResponseBean responseBean = new ResponseBean();
49
+        try {
50
+            //使用分页插件
51
+		    IPage<TaThirdPartyMiniappConfig> pg = new Page<>(pageNum, pageSize);
52
+            QueryWrapper<TaThirdPartyMiniappConfig> queryWrapper = new QueryWrapper<>();
53
+            queryWrapper.orderByDesc("create_date");
54
+
55
+            IPage<TaThirdPartyMiniappConfig> result = iTaThirdPartyMiniappConfigService.page(pg, queryWrapper);
56
+            responseBean.addSuccess(result);
57
+        }catch (Exception e){
58
+            e.printStackTrace();
59
+            logger.error("taThirdPartyMiniappConfigList -=- {}",e.toString());
60
+            responseBean.addError(e.getMessage());
61
+        }
62
+        return responseBean;
63
+    }
64
+
65
+    /**
66
+     * 保存对象
67
+     * @param taThirdPartyMiniappConfig 实体对象
68
+     * @return
69
+     */
70
+    @RequestMapping(value="/taThirdPartyMiniappConfig",method= RequestMethod.POST)
71
+    public ResponseBean taThirdPartyMiniappConfigAdd(@RequestBody TaThirdPartyMiniappConfig taThirdPartyMiniappConfig){
72
+        ResponseBean responseBean = new ResponseBean();
73
+        try {
74
+            if (iTaThirdPartyMiniappConfigService.save(taThirdPartyMiniappConfig)){
75
+                responseBean.addSuccess(taThirdPartyMiniappConfig);
76
+            }else {
77
+                responseBean.addError("fail");
78
+            }
79
+        }catch (Exception e){
80
+            e.printStackTrace();
81
+            logger.error("taThirdPartyMiniappConfigAdd -=- {}",e.toString());
82
+            responseBean.addError(e.getMessage());
83
+        }
84
+        return responseBean;
85
+    }
86
+
87
+    /**
88
+     * 根据id删除对象
89
+     * @param id  实体ID
90
+     */
91
+    @ResponseBody
92
+    @RequestMapping(value="/taThirdPartyMiniappConfig/{id}", method= RequestMethod.DELETE)
93
+    public ResponseBean taThirdPartyMiniappConfigDelete(@PathVariable Integer id){
94
+        ResponseBean responseBean = new ResponseBean();
95
+        try {
96
+            if(iTaThirdPartyMiniappConfigService.removeById(id)){
97
+                responseBean.addSuccess("success");
98
+            }else {
99
+                responseBean.addError("fail");
100
+            }
101
+        }catch (Exception e){
102
+            e.printStackTrace();
103
+            logger.error("taThirdPartyMiniappConfigDelete -=- {}",e.toString());
104
+            responseBean.addError(e.getMessage());
105
+        }
106
+        return responseBean;
107
+    }
108
+
109
+    /**
110
+     * 修改对象
111
+     * @param id  实体ID
112
+     * @param taThirdPartyMiniappConfig 实体对象
113
+     * @return
114
+     */
115
+    @RequestMapping(value="/taThirdPartyMiniappConfig/{id}",method= RequestMethod.PUT)
116
+    public ResponseBean taThirdPartyMiniappConfigUpdate(@PathVariable Integer id,
117
+                                        @RequestBody TaThirdPartyMiniappConfig taThirdPartyMiniappConfig){
118
+        ResponseBean responseBean = new ResponseBean();
119
+        try {
120
+            if (iTaThirdPartyMiniappConfigService.updateById(taThirdPartyMiniappConfig)){
121
+                responseBean.addSuccess(taThirdPartyMiniappConfig);
122
+            }else {
123
+                responseBean.addError("fail");
124
+            }
125
+        }catch (Exception e){
126
+            e.printStackTrace();
127
+            logger.error("taThirdPartyMiniappConfigUpdate -=- {}",e.toString());
128
+            responseBean.addError(e.getMessage());
129
+        }
130
+        return responseBean;
131
+    }
132
+
133
+    /**
134
+     * 根据id查询对象
135
+     * @param id  实体ID
136
+     */
137
+    @RequestMapping(value="/taThirdPartyMiniappConfig/{id}",method= RequestMethod.GET)
138
+    public ResponseBean taThirdPartyMiniappConfigGet(@PathVariable Integer id){
139
+        ResponseBean responseBean = new ResponseBean();
140
+        try {
141
+            responseBean.addSuccess(iTaThirdPartyMiniappConfigService.getById(id));
142
+        }catch (Exception e){
143
+            e.printStackTrace();
144
+            logger.error("taThirdPartyMiniappConfigDelete -=- {}",e.toString());
145
+            responseBean.addError(e.getMessage());
146
+        }
147
+        return responseBean;
148
+    }
149
+}

+ 64
- 0
src/main/java/com/huiju/estateagents/third/entity/TaThirdPartyMiniappConfig.java Vedi File

@@ -0,0 +1,64 @@
1
+package com.huiju.estateagents.third.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableId;
5
+import com.baomidou.mybatisplus.annotation.TableName;
6
+import lombok.Data;
7
+import lombok.EqualsAndHashCode;
8
+import lombok.experimental.Accessors;
9
+
10
+import java.io.Serializable;
11
+import java.time.LocalDateTime;
12
+
13
+/**
14
+ * <p>
15
+ *  
16
+ * </p>
17
+ *
18
+ * @author jobob
19
+ * @since 2019-10-17
20
+ */
21
+@Data
22
+@EqualsAndHashCode(callSuper = false)
23
+@Accessors(chain = true)
24
+@TableName("ta_third_party_miniapp_config")
25
+public class TaThirdPartyMiniappConfig implements Serializable {
26
+
27
+    private static final long serialVersionUID = 1L;
28
+
29
+    /**
30
+     * id
31
+     */
32
+    @TableId(value = "config_id", type = IdType.AUTO)
33
+    private Integer configId;
34
+
35
+    /**
36
+     * appid
37
+     */
38
+    private String appid;
39
+
40
+    /**
41
+     * app_secret
42
+     */
43
+    private String appSecret;
44
+
45
+    /**
46
+     * 目标类型
47
+     */
48
+    private String targetType;
49
+
50
+    /**
51
+     * 目标id
52
+     */
53
+    private String targetId;
54
+
55
+    /**
56
+     * 公司id
57
+     */
58
+    private Integer orgId;
59
+    
60
+    /**
61
+     * 过期时间
62
+     */
63
+    private LocalDateTime expirationDate;
64
+}

+ 18
- 0
src/main/java/com/huiju/estateagents/third/mapper/TaThirdPartyMiniappConfigMapper.java Vedi File

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.third.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.third.entity.TaThirdPartyMiniappConfig;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+/**
8
+ * <p>
9
+ *   Mapper 接口
10
+ * </p>
11
+ *
12
+ * @author jobob
13
+ * @since 2019-10-17
14
+ */
15
+@Mapper
16
+public interface TaThirdPartyMiniappConfigMapper extends BaseMapper<TaThirdPartyMiniappConfig> {
17
+
18
+}

+ 24
- 0
src/main/java/com/huiju/estateagents/third/service/ITaThirdPartyMiniappConfigService.java Vedi File

@@ -0,0 +1,24 @@
1
+package com.huiju.estateagents.third.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.third.entity.TaThirdPartyMiniappConfig;
5
+
6
+/**
7
+ * <p>
8
+ *   服务类
9
+ * </p>
10
+ *
11
+ * @author jobob
12
+ * @since 2019-10-17
13
+ */
14
+public interface ITaThirdPartyMiniappConfigService extends IService<TaThirdPartyMiniappConfig> {
15
+	
16
+	/**
17
+	 * 校验是否合法第三方接口调用
18
+	 * @param tokenHeader
19
+	 * @param appidHeader
20
+	 * @param nowHeader
21
+	 * @return
22
+	 */
23
+	String checkToken(String tokenHeader, String appidHeader, String nowHeader);
24
+}

+ 62
- 0
src/main/java/com/huiju/estateagents/third/service/impl/TaThirdPartyMiniappConfigServiceImpl.java Vedi File

@@ -0,0 +1,62 @@
1
+package com.huiju.estateagents.third.service.impl;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.huiju.estateagents.common.JWTUtils;
6
+import com.huiju.estateagents.common.MD5Utils;
7
+import com.huiju.estateagents.third.entity.TaThirdPartyMiniappConfig;
8
+import com.huiju.estateagents.third.mapper.TaThirdPartyMiniappConfigMapper;
9
+import com.huiju.estateagents.third.service.ITaThirdPartyMiniappConfigService;
10
+import org.springframework.beans.factory.annotation.Autowired;
11
+import org.springframework.stereotype.Service;
12
+
13
+import java.time.LocalDateTime;
14
+
15
+/**
16
+ * <p>
17
+ *   服务实现类
18
+ * </p>
19
+ *
20
+ * @author jobob
21
+ * @since 2019-10-17
22
+ */
23
+@Service
24
+public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPartyMiniappConfigMapper, TaThirdPartyMiniappConfig> implements ITaThirdPartyMiniappConfigService {
25
+	
26
+	@Autowired
27
+	private TaThirdPartyMiniappConfigMapper taThirdPartyMiniappConfigMapper;
28
+	
29
+	/**
30
+	 * 校验是否合法第三方接口调用
31
+	 *
32
+	 * @param tokenHeader
33
+	 * @param appidHeader
34
+	 * @param nowHeader
35
+	 * @return
36
+	 */
37
+	@Override
38
+	public String checkToken(String tokenHeader, String appidHeader, String nowHeader) {
39
+		//秘钥是否过期
40
+		QueryWrapper<TaThirdPartyMiniappConfig> queryWrapper = new QueryWrapper<>();
41
+		queryWrapper.eq("appid",appidHeader);
42
+		TaThirdPartyMiniappConfig taThirdPartyMiniappConfig = taThirdPartyMiniappConfigMapper.selectOne(queryWrapper);
43
+		if (LocalDateTime.now().isAfter(taThirdPartyMiniappConfig.getExpirationDate())){
44
+			return "秘钥已过期,请重新申请";
45
+		}
46
+		
47
+		//判断nowHeader是十五分钟之内(15 * 60 * 1000)
48
+		if (System.currentTimeMillis() - Long.valueOf(nowHeader) > (15 * 60 * 1000)){
49
+			return "密钥超时,请在十五分钟内请求";
50
+		}
51
+		
52
+		//重新加密对比
53
+		StringBuilder stringBuilder = new StringBuilder();
54
+		stringBuilder.append(taThirdPartyMiniappConfig.getAppid()).append(taThirdPartyMiniappConfig.getAppSecret()).append(nowHeader);
55
+		String token = MD5Utils.md5(MD5Utils.md5(stringBuilder.toString()));
56
+		if (!tokenHeader.equals(token)){
57
+			return "秘钥出错请重新生成";
58
+		}
59
+		
60
+		return "success";
61
+	}
62
+}

+ 5
- 0
src/main/resources/mapper/TaThirdPartyMiniappConfigMapper.xml Vedi File

@@ -0,0 +1,5 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
+<mapper namespace="com.huiju.estateagents.third.mapper.TaThirdPartyMiniappConfigMapper">
4
+
5
+</mapper>