puzhibing
2023-10-08 22199bbdda579861736420fe26c2873ab0f5d21c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package com.sinata.rest.modular.system.controller.common;
 
import com.sinata.common.enums.EnumAppSetKey;
import com.sinata.common.enums.EnumMemberGrade;
import com.sinata.common.enums.EnumUserBankDetailDoneType;
import com.sinata.common.enums.EnumUserBankDetailType;
import com.sinata.common.enums.mall.EnumMallGoodsState;
import com.sinata.common.enums.mall.EnumMallOrderState;
import com.sinata.rest.common.ApiUtils;
import com.sinata.rest.config.properties.JwtProperties;
import com.sinata.rest.config.properties.RestProperties;
import com.sinata.rest.core.util.MD5Util;
import com.sinata.rest.modular.auth.converter.BaseTransferEntity;
import com.sinata.rest.modular.auth.security.impl.Base64SecurityAction;
import com.sinata.rest.modular.auth.util.JwtTokenUtil;
import com.sinata.rest.modular.system.controller.common.vo.ApiVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
 
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * API接口
 */
@Slf4j
@RestController
@RequestMapping("/api")
@Api(tags="API通用接口", description = "通用接口")
public class ApiController {
 
    @Autowired
    private RestProperties restProperties;
 
    @Autowired
    private JwtProperties jwtProperties;
 
    @Resource
    private JwtTokenUtil jwtTokenUtil;
 
    /**
     * Swagger接口文档是否开启(true或false)
     */
    @Value("${rest.swagger-open}")
    private boolean swaggerOpen;
 
    @RequestMapping(value = "/queryEnum", method = RequestMethod.GET)
    @ApiOperation(value = "枚举字典", notes = "枚举字典")
    public Object queryEnum() {
        List<Object> list = new ArrayList<>();
 
        list.add("——————————————————————————————————————————");
        list.add("【APP设置ID】");
        for (EnumAppSetKey e : EnumAppSetKey.values()) {
            list.add(e + "【" + e.index + "," + e.mark + "】");
        }
        list.add("——————————————————————————————————————————");
 
        list.add("——————————————————————————————————————————");
        list.add("【用户等级】");
        for (EnumMemberGrade e : EnumMemberGrade.values()) {
            list.add(e + "【" + e.index + "," + e.mark + "】");
        }
        list.add("——————————————————————————————————————————");
 
        list.add("——————————————————————————————————————————");
        list.add("【商品状态】");
        for (EnumMallGoodsState e : EnumMallGoodsState.values()) {
            list.add(e + "【" + e.index + "," + e.mark + "】");
        }
        list.add("——————————————————————————————————————————");
 
        list.add("——————————————————————————————————————————");
        list.add("【商品订单状态】");
        for (EnumMallOrderState e : EnumMallOrderState.values()) {
            list.add(e + "【" + e.index + "," + e.mark + "】");
        }
        list.add("——————————————————————————————————————————");
 
        list.add("——————————————————————————————————————————");
        list.add("【用户账户详细-类型】");
        for (EnumUserBankDetailType e : EnumUserBankDetailType.values()) {
            list.add(e + "【" + e.index + "," + e.mark + "】");
        }
        list.add("——————————————————————————————————————————");
 
        list.add("——————————————————————————————————————————");
        list.add("【用户账户详细-触发类型】");
        for (EnumUserBankDetailDoneType e : EnumUserBankDetailDoneType.values()) {
            list.add(e + "【" + e.index + "," + e.mark + "】");
        }
        list.add("——————————————————————————————————————————");
 
        return list;
    }
 
    @RequestMapping(value = "/querySet", method = RequestMethod.GET)
    @ApiOperation(value = "查询是否开启鉴权/签名,跳过鉴权的请求", notes = "鉴权/签名配置", response = ApiVo.class)
    public Object querySet() {
        ApiVo vo = new ApiVo();
        vo.setSignOpen(restProperties.isSignOpen());
        vo.setAuthOpen(restProperties.isAuthOpen());
        vo.setAuthPath(jwtProperties.getAuthPath());
 
        return ApiUtils.returnOK(vo);
    }
 
    @GetMapping(value = "/auth")
    @ApiOperation(value = "测试-认证", notes = "测试-认证")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userId", value = "用户ID", defaultValue = "1", dataType = "Int", paramType = "query", required = true),
            @ApiImplicitParam(name = "jsonString", value = "请求参数实体转Json字符串", dataType = "String", paramType = "query"),
    })
    public Object auth(Integer userId, String jsonString) {
        // Swagger接口文档是否开启,false上线模式禁止访问
        if(!swaggerOpen) {
            return null;
        }
        // 测试用户ID
        String uuid = userId == null ? "1" : userId.toString();
 
        // 获取混淆MD5签名用的随机字符串
        final String randomKey = jwtTokenUtil.getRandomKey();
        // 获取Token
        final String token = jwtTokenUtil.generateToken(uuid, randomKey);
 
        // 封装用户登录认证信息
        Map<String, Object> map = new HashMap<>(4);
        map.put("id", uuid);
        map.put("randomKey", randomKey);
        map.put("token", "Bearer " + token);
 
 
        // 模拟POST请求参数
        if (!StringUtils.isEmpty(jsonString)) {
            // 2、对Json字符串(请求参数)进行Base64加密
            String encode = new Base64SecurityAction().doAction(jsonString);
            // 3、Base64加密后的Json字符串(请求参数) + 随机字符串,进行Md5加密
            String md5 = MD5Util.encrypt(encode + randomKey);
 
            BaseTransferEntity baseTransferEntity = new BaseTransferEntity();
            // Json字符串(请求参数)进行Base64加密,实体字符串
            baseTransferEntity.setObject(encode);
            // Base64加密后的Json字符串(请求参数) + 随机字符串,进行Md5加密,签名字符串
            baseTransferEntity.setSign(md5);
            map.put("body", baseTransferEntity);
        }
        return map;
    }
}