liuhaotian %!s(int64=3) %!d(string=hai) anos
pai
achega
787fc0a6f3

+ 73 - 0
pom.xml

@@ -7,6 +7,79 @@
     <groupId>org.example</groupId>
     <artifactId>sky-activate-service</artifactId>
     <version>1.0-SNAPSHOT</version>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.5.2</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
 
+    <name>sky-oauth</name>
+    <packaging>war</packaging>
+    <description>skyversation oauth server</description>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <!--            打包专用,平时注释掉-->
+
+            <!--            <exclusions>-->
+            <!--                <exclusion>-->
+            <!--                    <groupId>org.springframework.boot</groupId>-->
+            <!--                    <artifactId>spring-boot-starter-tomcat</artifactId>-->
+            <!--                </exclusion>-->
+            <!--            </exclusions>-->
+        </dependency>
+        <!--            打包专用,平时注释掉-->
+        <!--        <dependency>-->
+        <!--            <groupId>javax.servlet</groupId>-->
+        <!--            <artifactId>javax.servlet-api</artifactId>-->
+        <!--            <version>3.1.0</version>-->
+        <!--        </dependency>-->
+
+
+
+        <dependency>
+            <groupId>org.xerial</groupId>
+            <artifactId>sqlite-jdbc</artifactId>
+            <version>3.21.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.12.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-boot-starter</artifactId>
+            <version>3.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>2.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.20</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-cache</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.62</version>
+        </dependency>
+    </dependencies>
 
 </project>

+ 1 - 1
src/main/java/com/sky/activate/SkyMetadataApplication.java

@@ -8,7 +8,7 @@ import springfox.documentation.oas.annotations.EnableOpenApi;
 
 @EnableOpenApi  //swagger3.0
 @SpringBootApplication
-@MapperScan("com.sky.metadata.mapper")
+@MapperScan("com.sky.activate.mapper")
 public class SkyMetadataApplication extends SpringBootServletInitializer {
 
     public static void main(String[] args) {

+ 78 - 0
src/main/java/com/sky/activate/controller/VerifysController.java

@@ -0,0 +1,78 @@
+package com.sky.activate.controller;
+
+import com.sky.activate.entity.User;
+import com.sky.activate.service.VerifysService;
+import com.sky.activate.tool.Constant;
+import com.sky.activate.tool.MessageManage;
+import com.sky.activate.tool.Tools;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+
+@RestController
+@RequestMapping("/verify")
+public class VerifysController {
+
+
+    @Autowired
+    private VerifysService verifysService;
+
+
+    @PostMapping("/testStr")
+    public  String testStr(){
+        return verifysService.testStr();
+    }
+
+
+    @ApiOperation("添加用户")
+    @PostMapping("/register")
+    public String register(User user){
+//        if(user == null || StringUtils.isEmpty(user.getUsername()) || StringUtils.isEmpty(user.getPassword())){
+//            return MessageManage.getInstance().getResultContent(Constant.PARAM_ERROR, "参数错误", "参数错误");
+//        } else {
+//            User dbUser = verifysService.selectUserByName(user.getUsername());
+//            if(dbUser == null){
+//                user.setFailureTime(new Date(System.currentTimeMillis() + Constant.GENERAL_TIME));
+//                user.setGuid(Tools.getInstance().getUUID());
+//                user.setArchived(0);
+//                user.setDefaultUser(1);
+//                user.setCreateTime(new Date(System.currentTimeMillis()));
+//                user.setLastLoginTime(new Date(System.currentTimeMillis()));
+//                user.setPhoto("https://img1.baidu.com/it/u=2121265281,4059056546&fm=26&fmt=auto&gp=0.jpg");
+//                verifysService.addUser(user);
+//                return MessageManage.getInstance().getResultContent(Constant.SUCCESS, "注册成功", "成功");
+//            } else {
+//                return MessageManage.getInstance().getResultContent(Constant.INTER_ERROR, "该用户已存在", "该用户已存在");
+//            }
+//        }
+        return null;
+    }
+
+    @PostMapping("/VerifyUser")
+    public String VerifyUser(HttpServletRequest request){
+        /*String userName = request.getParameter("userName");
+        String password = request.getParameter("password");
+        String clientId = request.getParameter("clientId");
+        if(StringUtils.isEmpty(userName) || StringUtils.isEmpty(password)){
+            return MessageManage.getInstance().getResultContent(Constant.PARAM_ERROR, "参数错误", "参数错误");
+        }
+        User user = verifysService.selectUserByName(userName);
+        if(user == null){
+            return MessageManage.getInstance().getResultContent(Constant.NO_DATA, "用户不存在", "用户不存在");
+        }
+        if(Tools.getInstance().getCurrTime() > user.getFailureTime().getTime()){
+            return MessageManage.getInstance().getResultContent(Constant.USER_FAILURE, "用户过期", "用户过期");
+        }
+        if(user.getArchived() != 0){
+            return MessageManage.getInstance().getResultContent(Constant.USER_ARCHIVED, "用户失效", "用户失效");
+        }*/
+        return null;
+    }
+
+}

+ 215 - 0
src/main/java/com/sky/activate/entity/User.java

@@ -0,0 +1,215 @@
+package com.sky.activate.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class User implements Serializable {
+
+    private Integer id;                         // 用户主键id
+    private String guid;                        // 用户随机的guid
+    private Date createTime;                    // 用户创建时间
+    private Integer archived;                   // 是否在用,0 在用,1 已删除,2 已过期,3 已拉黑
+    private String email;                       // 邮箱
+//    private String password;                    // 密码,存储密文密码
+    private String phone;                       // 手机号
+    private String username;                    // 用户名
+    private Integer defaultUser;                // 是否是原生用户(非注册), 0 原生用户,1 注册用户 2 东软   // 是否是原生用户(非注册), 0 原生用户,1 注册用户 3DR用户
+    private Date lastLoginTime;                 // 最后获取用户信息时间
+    private String photo;                       // 用户头像
+    private String wechatId;                    // 微信id
+    private String weiboId;                     // 微博id
+    private String qqId;                        // qq id
+    private String wechatUsername;              // 微信用户名
+    private String weiboUsername;               // 微博用户名
+    private String qqUsername;                  // qq用户名
+    private String wechatPhoto;                 // 微信头像
+    private String weiboPhoto;                  // 微博头像
+    private String qqPhoto;                     // qq头像
+    private Date failureTime;                   // 失效时间
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getGuid() {
+        return guid;
+    }
+
+    public void setGuid(String guid) {
+        this.guid = guid;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getArchived() {
+        return archived;
+    }
+
+    public void setArchived(Integer archived) {
+        this.archived = archived;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public Integer getDefaultUser() {
+        return defaultUser;
+    }
+
+    public void setDefaultUser(Integer defaultUser) {
+        this.defaultUser = defaultUser;
+    }
+
+    public Date getLastLoginTime() {
+        return lastLoginTime;
+    }
+
+    public void setLastLoginTime(Date lastLoginTime) {
+        this.lastLoginTime = lastLoginTime;
+    }
+
+    public String getPhoto() {
+        return photo;
+    }
+
+    public void setPhoto(String photo) {
+        this.photo = photo;
+    }
+
+    public String getWechatId() {
+        return wechatId;
+    }
+
+    public void setWechatId(String wechatId) {
+        this.wechatId = wechatId;
+    }
+
+    public String getWeiboId() {
+        return weiboId;
+    }
+
+    public void setWeiboId(String weiboId) {
+        this.weiboId = weiboId;
+    }
+
+    public String getQqId() {
+        return qqId;
+    }
+
+    public void setQqId(String qqId) {
+        this.qqId = qqId;
+    }
+
+    public String getWechatUsername() {
+        return wechatUsername;
+    }
+
+    public void setWechatUsername(String wechatUsername) {
+        this.wechatUsername = wechatUsername;
+    }
+
+    public String getWeiboUsername() {
+        return weiboUsername;
+    }
+
+    public void setWeiboUsername(String weiboUsername) {
+        this.weiboUsername = weiboUsername;
+    }
+
+    public String getQqUsername() {
+        return qqUsername;
+    }
+
+    public void setQqUsername(String qqUsername) {
+        this.qqUsername = qqUsername;
+    }
+
+    public String getWechatPhoto() {
+        return wechatPhoto;
+    }
+
+    public void setWechatPhoto(String wechatPhoto) {
+        this.wechatPhoto = wechatPhoto;
+    }
+
+    public String getWeiboPhoto() {
+        return weiboPhoto;
+    }
+
+    public void setWeiboPhoto(String weiboPhoto) {
+        this.weiboPhoto = weiboPhoto;
+    }
+
+    public String getQqPhoto() {
+        return qqPhoto;
+    }
+
+    public void setQqPhoto(String qqPhoto) {
+        this.qqPhoto = qqPhoto;
+    }
+
+    public Date getFailureTime() {
+        return failureTime;
+    }
+
+    public void setFailureTime(Date failureTime) {
+        this.failureTime = failureTime;
+    }
+
+    @Override
+    public String toString() {
+        return "User{" +
+                "id=" + id +
+                ", guid='" + guid + '\'' +
+                ", createTime=" + createTime +
+                ", archived=" + archived +
+                ", email='" + email + '\'' +
+                ", phone='" + phone + '\'' +
+                ", username='" + username + '\'' +
+                ", defaultUser=" + defaultUser +
+                ", lastLoginTime=" + lastLoginTime +
+                ", photo='" + photo + '\'' +
+                ", wechatId='" + wechatId + '\'' +
+                ", weiboId='" + weiboId + '\'' +
+                ", qqId='" + qqId + '\'' +
+                ", wechatUsername='" + wechatUsername + '\'' +
+                ", weiboUsername='" + weiboUsername + '\'' +
+                ", qqUsername='" + qqUsername + '\'' +
+                ", wechatPhoto='" + wechatPhoto + '\'' +
+                ", weiboPhoto='" + weiboPhoto + '\'' +
+                ", qqPhoto='" + qqPhoto + '\'' +
+                ", failureTime=" + failureTime +
+                '}';
+    }
+}

+ 13 - 0
src/main/java/com/sky/activate/mapper/VerifysMapper.java

@@ -0,0 +1,13 @@
+package com.sky.activate.mapper;
+
+
+import com.sky.activate.entity.User;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface VerifysMapper {
+
+    User selectUserByName(String username);
+
+    void addUser(User user);
+}

+ 30 - 0
src/main/java/com/sky/activate/service/VerifysService.java

@@ -0,0 +1,30 @@
+package com.sky.activate.service;
+
+
+import com.sky.activate.entity.User;
+import com.sky.activate.mapper.VerifysMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheConfig;
+import org.springframework.stereotype.Service;
+
+@Service
+@CacheConfig(cacheNames = {"verifysService"})
+public class VerifysService {
+
+
+    @Autowired
+    private VerifysMapper verifysMapper;
+
+
+    public String testStr() {
+        return "Hello Word!!!";
+    }
+
+    public User selectUserByName(String username) {
+        return verifysMapper.selectUserByName(username);
+    }
+
+    public void addUser(User user) {
+         verifysMapper.addUser(user);
+    }
+}

+ 112 - 0
src/main/java/com/sky/activate/tool/Constant.java

@@ -0,0 +1,112 @@
+package com.sky.activate.tool;
+
+public class Constant {
+
+    /** 模拟聚划算高并发解决方案 **/
+    public final static String JHS_KEY_A = "jhs_A";
+    public final static String JHS_KEY_B = "jhs_B";
+
+    /** 模拟微博排行榜 **/
+    public final static String HOT_RANK_LIST_HOUR_KEY = "hot_rank_list_hour_key";
+    public final static String HOT_RANK_LIST_DAY_KEY = "hot_rank_list_day_key";
+    public final static String HOT_RANK_LIST_WEEK_KEY = "hot_rank_list_week_key";
+    public final static String HOT_RANK_LIST_MONTH_KEY = "hot_rank_list_month_key";
+
+    /** JWT ACCESS 密钥加密 **/
+    public final static String JWT_ACCESS_PRIVATE_KEY = "SKYVERSATION-ACCESS";
+    /** JWT REFRESH 密钥加密 **/
+    public final static String JWT_REFRESH_PRIVATE_KEY = "SKYVERSATION-REFRESH";
+    /** redis保存access_token的key的头 **/
+    public final static String REDIS_USER_ACCESS_HEADER = "USER_ACCESS_TOKEN::";
+    /** redis保存refresh_token的key的头 **/
+    public final static String REDIS_USER_REFRESH_HEADER = "USER_REFRESH_TOKEN::";
+    /** redis保存用户权限信息的key的头**/
+    public final static String REDIS_USER_USERID_HEADER="USER_USERID::";
+
+    /** Role Permission 角色、权限数据刷新时间 **/
+    public final static long ROLE_PERMISSION_REFRESH_TIME = 1000 * 60;
+
+    /** 游客权限 **/
+    public final static String VISITOR_PERMISSION = "1";
+    /** 普通用户权限 **/
+    public final static String GENERAL_PERMISSION = "1,2,7,11,17,20,23";
+    /** 角色管理员权限 **/
+    public final static String ROLE_MANAGER_PERMISSION = "3,4,8,13,18,21,25";
+    /** 系统管理员权限 **/
+    public final static String SYSTEM_MANAGER_PERMISSION = "5,9,10,12,14,15,19,22";
+    /** 超级管理员权限 **/
+    public final static String SUPER_MANAGER_PERMISSION = "27";
+
+    /** 无超管权限*/
+    public final static int NO_SYSDBA_PERMISSION = 600;
+
+    /** 游客有效时间 **/
+    public final static long VISITOR_TIME = 1000 * 60 * 60 * 24 * 365;
+    /**  普通用户有效时间 **/
+    public final static long GENERAL_TIME = 1000 * 60 * 60 * 24 * 365;
+    /**  角色管理员有效时间 **/
+    public final static long ROLE_MANAGER_TIME = 1000 * 60 * 60 * 24 * 365 * 2;
+    /**  系统管理员有效时间 **/
+    public final static long SYSTEM_MANAGER_TIME = 1000 * 60 * 60 * 24 * 365 * 2;
+    /**  超级管理员有效时间 **/
+    public final static long SUPER_MANAGER_TIME = 1000 * 60 * 60 * 24 * 365 * 3;
+
+    /** access token 有效时间 **/
+    public final static long ACCESS_TOKEN_TIME = 1000 * 60 * 60 * 24;
+    /** refresh token 有效时间 **/
+    public final static long REFRESH_TOKEN_TIME = 1000 * 60 * 60 * 24 * 7;
+
+
+    /** 网络请求返回值 **/
+    public final static int SUCCESS = 200;
+    /** 参数错误 **/
+    public final static int PARAM_ERROR = -1;
+    /** 服务端错误 **/
+    public final static int SERVER_ERROR = 500;
+    /** 无权限 **/
+    public final static int NO_PERMISSION = 201;
+    /** 数据错误,无数据 **/
+    public final static int NO_DATA = 202;
+    /** 内部错误 **/
+    public final static int INTER_ERROR = 203;
+    /** 数据库错误 **/
+    public final static int DATABASE_ERROR = 204;
+    /** 数据为空 **/
+    public final static int NULL_DATA = 205;
+    /** 用户过期 **/
+    public final static int USER_FAILURE = 206;
+    /** 用户失效 **/
+    public final static int USER_ARCHIVED = 207;
+    /** 无token **/
+    public final static int NO_TOKEN = 208;
+    /** 无效token **/
+    public final static int FAILURE_TOKEN = 212;
+
+//    public final static String[] TABLE_NAME = new String[]{
+//            "http://localhost:10086/oauth/user/getUserByToken",
+//            "http://localhost:10086/oauth/record/addRecord",
+//            "http://localhost:10086/oauth/user/getUserRolePermission",
+//            "http://localhost:10086/oauth/permission/updatePermission",
+//            "http://localhost:10086/oauth/permission/addRoleAndPermission"};
+
+
+    public final static String[] METADATA_URL_NAME = new String[]{
+            "http://localhost:10086/user/getUserByToken",
+            "http://localhost:10086/record/addRecord",
+            "http://localhost:10086/user/getUserRolePermission",
+            "http://localhost:10086/permission/updatePermission",
+            "http://localhost:10086/permission/addRoleAndPermission"};
+
+
+
+
+    final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE };
+
+    // Requires positive x
+    public final static int STRINGSIZE(int x) {
+        for (int i=0; ; i++)
+            if (x <= sizeTable[i])
+                return i+1;
+    }
+
+}

+ 110 - 0
src/main/java/com/sky/activate/tool/MessageManage.java

@@ -0,0 +1,110 @@
+package com.sky.activate.tool;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONException;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/***
+ * 接口返回消息封装管理工具
+ */
+
+@Slf4j
+public class MessageManage {
+
+    private static MessageManage messageManage = new MessageManage();
+    private MessageManage(){}
+    public static MessageManage getInstance(){
+        if(messageManage == null)
+            messageManage = new MessageManage();
+        return messageManage;
+    }
+
+    public String getResultContent(int code, String content, String message){
+        JSONObject json = new JSONObject();
+        try {
+            json.put("code", code);
+            if(content == null || content.equals("")){
+                json.put("content", null);
+            } else {
+                json.put("content", content);
+            }
+            json.put("message", message);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        log.info(json.toString());
+        return json.toString();
+    }
+
+    public String getResultContent(int code, Object bean, String message){
+        JSONObject json = new JSONObject();
+        try {
+            json.put("code", code);
+            if(bean == null){
+                json.put("content", null);
+            } else {
+                json.put("content", JSON.toJSON(bean));
+            }
+            json.put("message", message);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        log.info(json.toString());
+        return json.toString();
+    }
+
+    public String getResultContent(int code, List lis, String message){
+        JSONObject json = new JSONObject();
+        try {
+            json.put("code", code);
+            json.put("message", message);
+            if(lis != null && lis.size() > 0){
+                JSONArray data = new JSONArray();
+                for(Object obj : lis){
+                    data.add(JSON.toJSON(obj));
+                }
+                json.put("content", data);
+            } else {
+                json.put("content", null);
+            }
+
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        log.info(json.toString());
+        return json.toString();
+    }
+    public String getResultContent(int code, List lis, String message, Long total){
+        JSONObject json = new JSONObject();
+        try {
+            json.put("code", code);
+            json.put("message", message);
+            if(total == null || total < 0){
+                json.put("total", 0);
+            } else {
+                json.put("total", total);
+            }
+            if(lis != null && lis.size() > 0){
+                JSONArray data = new JSONArray();
+                for(Object obj : lis){
+                    data.add(JSON.toJSON(obj));
+                }
+                json.put("content", data);
+            } else {
+                json.put("content", "");
+            }
+
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        log.info(json.toString());
+        return json.toString();
+    }
+
+
+}

+ 252 - 0
src/main/java/com/sky/activate/tool/Tools.java

@@ -0,0 +1,252 @@
+package com.sky.activate.tool;
+
+import javax.servlet.http.HttpServletRequest;
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+import java.util.Enumeration;
+import java.util.UUID;
+
+public class Tools {
+
+    private static Tools tools = new Tools();
+    private Tools(){};
+    public static Tools getInstance(){
+        if(tools == null)
+            tools = new Tools();
+        return tools;
+    }
+
+
+    private long currTime = System.currentTimeMillis();
+
+    public long getCurrTime() {
+        return currTime;
+    }
+
+    /**
+     * 获取权限最大值
+     * @param roleStr
+     * @return
+     */
+    public int getRoleMax(String roleStr){
+        String[] roles = roleStr.split(",");
+        int max = 0;
+        for(String role : roles){
+            int rol = Integer.valueOf(role);
+            if(max < rol){
+                max = rol;
+            }
+        }
+        return max;
+    }
+
+    /**
+     * 获取ip地址
+     * @param request
+     * @return
+     */
+    public String getIPAddress(HttpServletRequest request) {
+        String ip = null;
+        //X-Forwarded-For:Squid 服务代理
+        String ipAddresses = request.getHeader("X-Forwarded-For");https://item.jd.com/10041580245532.html#crumb-wrap
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //Proxy-Client-IP:apache 服务代理
+            ipAddresses = request.getHeader("Proxy-Client-IP");
+        }
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //WL-Proxy-Client-IP:weblogic 服务代理
+            ipAddresses = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //HTTP_CLIENT_IP:有些代理服务器
+            ipAddresses = request.getHeader("HTTP_CLIENT_IP");
+        }
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //X-Real-IP:nginx服务代理
+            ipAddresses = request.getHeader("X-Real-IP");
+        }
+        //有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP
+        if (ipAddresses != null && ipAddresses.length() != 0) {
+            ip = ipAddresses.split(",")[0];
+        }
+        //还是不能获取到,最后再通过request.getRemoteAddr();获取
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            ip = request.getRemoteAddr();
+        }
+        return ip;
+    }
+
+    /***
+     * 生成随机的UUID + yyyy-MM-dd
+     * @return
+     */
+    public String getUUIDTime(){
+        String str = "yyy-MM-dd";
+        SimpleDateFormat sdf = new SimpleDateFormat(str);
+        return UUID.randomUUID().toString() + "-" + sdf.format(new java.util.Date());
+    }
+
+    /***
+     * 生成随机的UUID
+     * @return
+     */
+    public String getUUID(){
+        return UUID.randomUUID().toString();
+    }
+
+    /**
+     * @param request 请求对象
+     * @param clazz   要设置Bean的类型,传入试为: Bean.class
+     * @return T
+     */
+    @SuppressWarnings("unchecked")
+    public <T> T getEntityByRequest(HttpServletRequest request, Class<T> clazz){
+
+        //获取页面所有的请求参数名称
+        Enumeration<String> enume = request.getParameterNames();
+        T beanObj = getObjectByClass(clazz);
+        try{
+            while(enume.hasMoreElements()){
+                //参数名称
+                String propertyName = enume.nextElement();
+                //判断是否存在此属性
+                if(isCheckBeanExitsPropertyName(clazz,propertyName)){
+                    //获取请求值
+                    Object propertyValue = request.getParameter(propertyName);
+                    setProperties(beanObj,propertyName,propertyValue);
+                }
+            }
+        }catch(Exception e){
+//            System.out.println(Tools.class.getPackageName() + ":" + e.toString());
+        }
+        return beanObj;
+    }
+
+    private <T> T getObjectByClass(Class<T> clazz){
+        T t = null;
+        try {
+            t = clazz.newInstance();
+        } catch (InstantiationException e1) {
+            e1.printStackTrace();
+        } catch (IllegalAccessException e1) {
+            e1.printStackTrace();
+        }
+        return t;
+    }
+
+    /**
+     * @param clazz           Class对象
+     * @param propertyName    属性名称
+     * @return true || false  检查对象中是否存在该属性名称
+     */
+    private boolean isCheckBeanExitsPropertyName(Class<?> clazz,String propertyName){
+        boolean retValue = false;
+        try {
+            Field field =  clazz.getDeclaredField(propertyName);
+            if(null != field){
+                retValue = true;
+            }
+        } catch (NoSuchFieldException e) {
+            System.out.println("类: " + clazz.getSimpleName()+",不存在属性名: "+propertyName+" ,详细错误信息: "+e.getMessage());
+        }
+        return retValue;
+
+    }
+
+
+    /**
+     * 设置字段值
+     * @param object       实例对象
+     * @param propertyName 属性名
+     * @param value        新的字段值
+     * @return
+     */
+    public void setProperties(Object object, String propertyName,Object value) throws IntrospectionException,
+            IllegalAccessException, InvocationTargetException {
+        PropertyDescriptor pd = new PropertyDescriptor(propertyName,object.getClass());
+        Method methodSet = pd.getWriteMethod();
+        if(pd.getPropertyType().getName().equals(Boolean.class.getName())){
+            methodSet.invoke(object,Boolean.valueOf(value + ""));
+        } else if(pd.getPropertyType().getName().equals(Integer.class.getName())){
+            methodSet.invoke(object,Integer.valueOf(value + ""));
+        } else if(pd.getPropertyType().getName().equals(Double.class.getName())){
+            methodSet.invoke(object,Double.valueOf(value + ""));
+        } else if(pd.getPropertyType().getName().equals(Float.class.getName())){
+            methodSet.invoke(object,Float.valueOf(value + ""));
+        } else if(pd.getPropertyType().getName().equals(Date.class.getName())){
+            methodSet.invoke(object,Date.valueOf(value + ""));
+        } else {
+            methodSet.invoke(object,value);
+        }
+    }
+
+    /***
+     * 判断纬度是否合法,
+     * @param lats 纬度集,范围是:-85 —— 85
+     * @return
+     */
+    public boolean isLegalLat(Double ... lats){
+        for (Double lat:
+             lats) {
+            if(lat == null || lat > 85 || lat < -85 ){
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /***
+     * 判断经度是否合法,
+     * @param lons 经度集,范围是:-180 —— 180
+     * @return
+     */
+    public boolean isLegalLon(Double ... lons){
+        for (Double lon:
+                lons) {
+            if(lon == null || lon > 180 || lon < -180 ){
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /***
+     * 文件流保存到本地
+     * @param file
+     * @param filePath
+     * @param fileName
+     * @throws Exception
+     */
+    public void uploadFile(byte[] file, String filePath, String fileName) throws Exception {
+        File targetFile = new File(filePath);
+        if(!targetFile.exists()){
+            targetFile.mkdirs();
+        }
+        FileOutputStream out = new FileOutputStream(filePath + fileName);
+        out.write(file);
+        out.flush();
+        out.close();
+    }
+
+
+    public static String str = "yyy-MM-dd HH:mm:ss";
+    public static SimpleDateFormat sdf = new SimpleDateFormat(str);
+
+    /***
+     * 获取字符串类型时间
+     * @param date
+     * @return
+     */
+    public String getDateYYYYmmDDHHmmss(java.util.Date date){
+        return sdf.format(date);
+    }
+
+
+}

+ 42 - 71
src/main/resources/application.properties

@@ -1,91 +1,62 @@
 
-
-#\u57FA\u672C\u914D\u7F6E
-server.port=10087
-server.servlet.encoding.force=true
-server.servlet.encoding.charset=UTF-8
-# \u963F\u91CC\u4E91\u670D\u52A1\uFF1A121.43.55.7
-# \u4F4F\u5EFA\u5385\u8BA1\u7B97\u670D\u52A1\uFF1A193.168.195.16(\u540E\u53F0\u670D\u52A1\u5668)   193.168.195.17(web\u670D\u52A1\u5668)
-## \u4F4F\u5EFA\u5385\u5B58\u50A8\u670D\u52A1\uFF1A193.168.195.18(\u4E3B\u5B58\u50A8)  193.168.195.19(\u5B50\u5B58\u50A8)
-
-#spring.datasource.url=jdbc:mysql://121.43.55.7:3306/metadata_sky?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
+#\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7
+server.port=10086
+# 121.43.55.7   localhost
+# \u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u72E1\u51E4\u62F7\u951F\u65A4\u62F7121.43.55.7
+# \u4F4F\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F?193.168.195.16(\u951F\u65A4\u62F7\u53F0\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7)   193.168.195.17(web\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7)
+## \u4F4F\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u82A5\u50A8\u951F\u65A4\u62F7\u951F\u65A4\u62F7193.168.195.18(\u951F\u65A4\u62F7\u951F\u82A5\u50A8)  193.168.195.19(\u951F\u63A5\u5B58\u50A8)
+#server.servlet.encoding.force=true
+#server.servlet.encoding.charset=UTF-8
+# \u4F7F\u951F\u65A4\u62F7mysql\u951F\u65A4\u62F7\u951F\u65A4\u62F7
+#spring.datasource.url=jdbc:mysql://localhost:3306/oauth_sky?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
 #spring.datasource.username=root
-#spring.datasource.password=SKYversation0816
+## \u4F4F\u951F\u65A4\u62F7\u951F\u65A4\u62F7mysql\u951F\u65A4\u62F7 Abcd1234,       \u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7mysql\u951F\u65A4\u62F7 123456    SKYversation0816
+#spring.datasource.password=root
 #spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
 
-##\u4F7F\u7528mysql
-#spring.jpa.database = mysql
-
-# \u8FBE\u68A6\u6570\u636E\u5E93-\u963F\u91CC\u4E91
-#spring.datasource.url=jdbc:dm://121.43.55.7:5236/METADATA_SKY
-#spring.datasource.username=SYSDBA
-#spring.datasource.password=SYSDBA
-#spring.datasource.driverClassName=dm.jdbc.driver.DmDriver
-
-# \u8FBE\u68A6\u6570\u636E\u5E93-\u4FE1\u521B\u533A-\u6D4B\u8BD5
-#spring.datasource.url=jdbc:dm://10.30.6.220:5236/METADATA_SKY
-#spring.datasource.username=GISDBA
-#spring.datasource.password=gisdba123
-#spring.datasource.driverClassName=dm.jdbc.driver.DmDriver
+# \u4F7F\u951F\u65A4\u62F7sqlite\u951F\u65A4\u62F7\u951F\u65A4\u62F7
+spring.datasource.driver-class-name=org.sqlite.JDBC
+spring.datasource.url=jdbc:sqlite::resource:static/test.db
+spring.datasource.username=
+spring.datasource.password=
 
-# \u8FBE\u68A6\u6570\u636E\u5E93-\u4FE1\u521B\u533A-\u6B63\u5F0F
-spring.datasource.url=jdbc:dm://${METADATA_DB_IP:DM_ZTQ_N}:${METADATA_DB_PORT:5236}/${METADATA_DB_TABLE_NAME:METADATA_SKY}
-spring.datasource.username=${METADATA_DB_USERNAME:UGIS}
-spring.datasource.password=${METADATA_DB_PASSWORD:UGISUGIS123.}
-spring.datasource.driverClassName=dm.jdbc.driver.DmDriver
+# \u951F\u65A4\u62F7\u59CB\u951F\u65A4\u62F7servlet
+spring.mvc.servlet.load-on-startup=1
 
-# \u8FBE\u68A6\u6570\u636E\u5E93-\u963F\u91CC\u4E91
-#spring.datasource.url=jdbc:dm://121.43.55.7:5236/METADATA_SKY
-#spring.datasource.username=SYSDBA
-#spring.datasource.password=SYSDBA
-#spring.datasource.driverClassName=dm.jdbc.driver.DmDriver
-
-spring.mvc.async.request-timeout=60000
-
-#\u662F\u5426\u663E\u793Asql\u8BED\u53E5
+#\u4F7F\u951F\u65A4\u62F7mysql
+spring.jpa.database = mysql
+#\u951F\u89D2\u51E4\u62F7\u951F\u65A4\u62F7\u793Asql\u951F\u65A4\u62F7\u951F?
 spring.jpa.show-sql=true
-#mybatis\u914D\u7F6E mybatis.config-location=classpath:mybatis-config.xml // \u914D\u7F6E\u6587\u4EF6\u4F4D\u7F6E
-mybatis.typeAliasesPackage=com.sky.metadata.entity
+#mybatis\u951F\u65A4\u62F7\u951F\u65A4\u62F7 mybatis.config-location=classpath:mybatis-config.xml // \u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u4FA5\u7877\u62F7\u4F4D\u951F\u65A4\u62F7
+mybatis.typeAliasesPackage=com.sky.activate.entity
 mybatis.mapper-locations=classpath:mapper/*.xml
-logging.level.com.sky.metadata.mapper = DEBUG
-spring.servlet.multipart.max-file-size=1000MB
-spring.servlet.multipart.max-request-size=1000MB
 
-# redis\u914D\u7F6E
+# redis\u951F\u65A4\u62F7\u951F\u65A4\u62F7
 # REDIS (RedisProperties)
-# Redis\u6570\u636E\u5E93\u7D22\u5F15\uFF08\u9ED8\u8BA4\u4E3A0\uFF09
-spring.redis.database=0
-# Redis\u670D\u52A1\u5668\u5730\u5740    193.168.195.16  121.43.55.7     193.168.214.11
-#spring.redis.host=${METADATA_REDIS_IP:121.43.55.7}
-spring.redis.host=${METADATA_REDIS_IP:121.43.55.7}
-# Redis\u670D\u52A1\u5668\u8FDE\u63A5\u7AEF\u53E3
-#spring.redis.port=${METADATA_REDIS_PORT:6379}
-spring.redis.port=${METADATA_REDIS_PORT:6380}
-# Redis\u670D\u52A1\u5668\u8FDE\u63A5\u5BC6\u7801\uFF08\u9ED8\u8BA4\u4E3A\u7A7A\uFF09
-#spring.redis.password=${REDIS_PASSWORD:skyversation}
+# Redis\u951F\u65A4\u62F7\u951F\u6377\u5321\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u9ED8\u951F\u65A4\u62F7\u4E3A0\u951F\u65A4\u62F7
+spring.redis.database=2
+# Redis\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u5740    //121.40.241.56     193.168.195.18      121.43.55.7     10.242.251.44
+spring.redis.host=${CONLLECTION_REDIS_IP:121.43.55.7}
+#spring.redis.host=121.43.55.7
+# Redis\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u63A5\u7AEF\u5321\u62F7
+spring.redis.port=${CONLLECTION_REDIS_PORT:6380}
+#spring.redis.port=6379
+# Redis\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u8BEB\uFF08\u9ED8\u951F\u65A4\u62F7\u4E3A\u951F\u79F8\uFF4F\u62F7
 spring.redis.password=${REDIS_PASSWORD:SKYversation}
-# \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
+# \u951F\u65A4\u62F7\u951F\u63A5\u7B79\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u7EDE\u7678\u62F7\u9176\u951F\u8857\u7889\u62F7\u951F\u7EDE\u4E45\u4F19\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u75B2\u951F?
 spring.redis.jedis.pool.max-active=8
-# \u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
+# \u951F\u65A4\u62F7\u951F\u63A5\u7B79\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u5374\u951F\u7EDE\u618B\u62F7\u6D0C\u310A\u7678\u62F7\u9176\u951F\u8857\u7889\u62F7\u951F\u7EDE\u4E45\u4F19\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u75B2\u951F?
 spring.redis.jedis.pool.max-wait=-1
-# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5
+# \u951F\u65A4\u62F7\u951F\u63A5\u7B79\u62F7\u951F\u53EB\u7889\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7
 spring.redis.jedis.pool.max-idle=8
-# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5
+# \u951F\u65A4\u62F7\u951F\u63A5\u7B79\u62F7\u951F\u53EB\u7889\u62F7\u951F\u65A4\u62F7\u5C0F\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7\u951F\u65A4\u62F7
 spring.redis.jedis.pool.min-idle=0
-# \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09
+# \u951F\u65A4\u62F7\u951F\u63A5\u7B79\u62F7\u65F6\u65F6\u951F\u6212\uFF08\u951F\u65A4\u62F7\u951F\u8BEB\uFF09
 spring.redis.timeout=5000
 
-# \u8BBE\u7F6Eswagger
+# \u951F\u65A4\u62F7\u951F\u65A4\u62F7swagger
 springfox.documentation.swagger-ui.enabled=true
 
-# \u9759\u6001\u8D44\u6E90\u76EE\u5F55
-spring.mvc.static-path-pattern= /image/**
-# \u56FE\u7247\u5B58\u653E\u7684\u771F\u5B9E\u8DEF\u5F84
-# file:/root/icons     D://work/icons/
-spring.web.resources.static-locations= file:${METADATA_STATIC_IMAGE_PATH:/root/icons/}
-
-spring.update.excel.path = ${METADATA_UPDATE_EXCEL_PATH:/root/updateFile/}
-spring.update.excel.time = ${METADATA_UPDATE_EXCEL_TIME:86400000}
+#DR\uFFFD\u00FB\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u02B1\uFFFD\uFFFD
+overdue.date = ${OAUTH_OVERDUE_DATE:1711938935000}
 
-spring.update.dr.path = ${METADATA_UPDATE_DR_PATH:/root/DRUpdateFile/dr_config.json}
-spring.update.dr.time = ${METADATA_UPDATE_DR_TIME:86400000}

+ 46 - 0
src/main/resources/mapper/VerifyMapper.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sky.activate.mapper.VerifysMapper">
+
+
+    <resultMap id="BaseResultMap" type="com.sky.oauth.entity.User">
+        <result column="id" jdbcType="INTEGER" property="id" />
+        <result column="guid" jdbcType="VARCHAR" property="guid" />
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+        <result column="archived" jdbcType="INTEGER" property="archived" />
+        <result column="archived" jdbcType="VARCHAR" property="archived" />
+        <result column="password" jdbcType="VARCHAR" property="password" />
+        <result column="phone" jdbcType="VARCHAR" property="phone" />
+        <result column="username" jdbcType="VARCHAR" property="username" />
+        <result column="default_user" jdbcType="VARCHAR" property="defaultUser" />
+        <result column="last_login_time" jdbcType="TIMESTAMP" property="lastLoginTime" />
+        <result column="photo" jdbcType="VARCHAR" property="photo" />
+        <result column="wechat_id" jdbcType="VARCHAR" property="wechatId" />
+        <result column="weibo_id" jdbcType="VARCHAR" property="weiboId" />
+        <result column="qq_id" jdbcType="VARCHAR" property="qqId" />
+        <result column="wechat_username" jdbcType="VARCHAR" property="wechatUsername" />
+        <result column="weibo_username" jdbcType="VARCHAR" property="weiboUsername" />
+        <result column="qq_username" jdbcType="VARCHAR" property="qqUsername" />
+        <result column="wechat_photo" jdbcType="VARCHAR" property="wechatPhoto" />
+        <result column="weibo_photo" jdbcType="VARCHAR" property="weiboPhoto" />
+        <result column="qq_photo" jdbcType="VARCHAR" property="qqPhoto" />
+        <result column="failure_time" jdbcType="TIMESTAMP" property="failureTime" />
+    </resultMap>
+    <select id="selectUserByName" resultType="com.sky.oauth.entity.User"  resultMap="BaseResultMap">
+         select * from p_user where username = #{name};
+    </select>
+
+    <!-- useGeneratedKeys="true" keyProperty="id"-->
+    <insert id="addUser" parameterType="com.sky.oauth.entity.User">
+        insert into p_user(
+            guid,create_time,archived,email,password,phone,username,default_user, last_login_time, photo,
+            wechat_id,weibo_id,qq_id,wechat_username,weibo_username,qq_username, wechat_photo,
+            weibo_photo,qq_photo, failure_time
+            )
+        values (
+            #{guid},#{createTime},'0',#{email},#{password},#{phone},#{username},#{defaultUser},#{lastLoginTime},#{photo},
+            #{wechatId},#{weiboId},#{qqId},#{wechatUsername},#{weiboUsername},#{qqUsername},#{wechatPhoto},
+            #{weiboPhoto},#{qqPhoto},#{failureTime}
+            );
+    </insert>
+</mapper>

BIN=BIN
src/main/resources/static/test.db