Browse Source

登录功能

askin 2 years ago
parent
commit
8d29db3db7
36 changed files with 1799 additions and 90 deletions
  1. 8 0
      sources/server/vrv/vrv-core-api/pom.xml
  2. 17 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/auth/AuthResult.java
  3. 18 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/auth/ExcludeUrlsBean.java
  4. 63 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/auth/PassportBean.java
  5. 0 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/core/.gitignore
  6. 63 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/core/DeviceBean.java
  7. 5 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/core/UserBean.java
  8. 44 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/core/VerifyCodeBean.java
  9. 0 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/.gitignore
  10. 7 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/EncryptTypes.java
  11. 12 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/LoginResults.java
  12. 9 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/LoginSession.java
  13. 22 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/LoginType.java
  14. 9 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/VerifyCodeStatus.java
  15. 9 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/VerifyCodeType.java
  16. 0 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/service/core/.gitignore
  17. 10 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/service/core/AuthService.java
  18. 97 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/service/core/DeviceService.java
  19. 2 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/service/core/UserService.java
  20. 98 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/service/core/VerifyCodeService.java
  21. 18 0
      sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/until/core/PasswordEncryptUtils.java
  22. 3 1
      sources/server/vrv/vrv-core-service/pom.xml
  23. 1 1
      sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/dao/core/DeviceParamDao.java
  24. 1 8
      sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/domain/core/DeviceParam.java
  25. 42 0
      sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/domain/core/VerifyCode.java
  26. 49 0
      sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/service/core/impl/AuthServiceImpl.java
  27. 2 3
      sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/service/core/impl/DeviceParamServiceImpl.java
  28. 26 15
      sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/service/core/impl/UserServiceImpl.java
  29. 208 0
      sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/service/core/impl/VerifyCodeServiceImpl.java
  30. 256 0
      sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/util/core/ValidateCodeGenerator.java
  31. 191 0
      sources/server/vrv/vrv-platform/src/main/java/com/kuyuntech/vrv/platform/controller/auth/AuthController.java
  32. 0 39
      sources/server/vrv/vrv-platform/src/main/java/com/kuyuntech/vrv/platform/controller/core/AuthController.java
  33. 193 0
      sources/server/vrv/vrv-platform/src/main/java/com/kuyuntech/vrv/platform/controller/core/VerifyCodeController.java
  34. 1 0
      sources/server/vrv/vrv-platform/src/main/resources/application.properties
  35. 17 23
      sources/server/vrv/vrv-platform/src/main/resources/static/project.html
  36. 298 0
      sources/server/vrv/vrv-platform/src/main/resources/static/user.html

+ 8 - 0
sources/server/vrv/vrv-core-api/pom.xml

@@ -44,6 +44,14 @@
              <artifactId>lombok</artifactId>
              <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 17 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/auth/AuthResult.java

@@ -0,0 +1,17 @@
+package com.kuyuntech.vrv.coreapi.bean.auth;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class AuthResult {
+
+    private Boolean status;
+
+
+}

+ 18 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/auth/ExcludeUrlsBean.java

@@ -0,0 +1,18 @@
+package com.kuyuntech.vrv.coreapi.bean.auth;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class ExcludeUrlsBean {
+
+    private List<String> urls = new ArrayList<>();
+}

+ 63 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/auth/PassportBean.java

@@ -0,0 +1,63 @@
+package com.kuyuntech.vrv.coreapi.bean.auth;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 用户通行证Bean
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class PassportBean implements Serializable {
+
+    //唯一标识
+    private String code;
+
+    //用户真实姓名
+    private String realName;
+
+    //用户昵称
+    private String nickname;
+
+    //用户账号
+    private String account;
+
+    //用户密码
+    @JsonIgnore
+    private String password;
+
+    //验证码
+    private String verifyCode;
+
+    //用户邮箱
+    private String email;
+
+    //用户手机号码
+    private String mobile;
+
+
+    //上次修改密码日期
+    private Date lastUpdatePwdTime;
+
+
+    //出生日期
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    private Date birthday;
+
+    //所属应用唯一标识
+    private String appCode;
+
+    //登录类型
+    private String loginType;
+
+}

+ 0 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/core/.gitignore


+ 63 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/core/DeviceBean.java

@@ -0,0 +1,63 @@
+package com.kuyuntech.vrv.coreapi.bean.core;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.Builder;
+import lombok.ToString;
+import java.io.Serializable;
+
+import java.lang.Long;
+import java.lang.Short;
+import java.util.Date;
+import java.lang.String;
+
+/**
+* DeviceBean
+*
+*/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ToString
+public class DeviceBean  implements Serializable {
+
+
+    private String name ;
+
+    private String ip ;
+
+    private String sn ;
+
+    private String type ;
+
+    private String operatorNumber ;
+
+    private String operatorCode ;
+
+    private String projectNumber ;
+
+    private String projectCode ;
+
+    private String gatewayNumber ;
+
+    private String gatewayCode ;
+
+    private String deviceStatus ;
+
+    private Long id ;
+
+    private Long version ;
+
+    private String code ;
+
+    private Short valid ;
+
+    private Date createTime ;
+
+    private Date updateTime ;
+
+
+
+}

+ 5 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/core/UserBean.java

@@ -1,5 +1,6 @@
 package com.kuyuntech.vrv.coreapi.bean.core;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -30,6 +31,7 @@ public class UserBean  implements Serializable {
 
     private String phone ;
 
+    //@JsonIgnore
     private String password ;
 
     private String roleCode ;
@@ -52,6 +54,9 @@ public class UserBean  implements Serializable {
 
     private Date updateTime ;
 
+    //验证码
+    private String verifyCode;
+
 
 
 }

+ 44 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/bean/core/VerifyCodeBean.java

@@ -0,0 +1,44 @@
+package com.kuyuntech.vrv.coreapi.bean.core;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+* VerifyCodeBean
+*
+*/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class VerifyCodeBean  implements Serializable {
+
+
+    private String type ;
+
+    private String verifyCode ;
+
+    private Long expireTime ;
+
+    private String verified ;
+
+    private Long id ;
+
+    private Long version ;
+
+    private String code ;
+
+    private Short valid ;
+
+    private Date createTime ;
+
+    private Date updateTime ;
+
+
+
+}

+ 0 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/.gitignore


+ 7 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/EncryptTypes.java

@@ -0,0 +1,7 @@
+package com.kuyuntech.vrv.coreapi.constant.core;
+
+public class EncryptTypes {
+
+    public static final String BASE64 = "1";
+
+}

+ 12 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/LoginResults.java

@@ -0,0 +1,12 @@
+package com.kuyuntech.vrv.coreapi.constant.core;
+
+public class LoginResults {
+
+
+    //成功
+    public static final String SUCESS = "1";
+
+    //失败
+    public static final String ERROR = "2";
+
+}

+ 9 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/LoginSession.java

@@ -0,0 +1,9 @@
+package com.kuyuntech.vrv.coreapi.constant.core;
+
+public class LoginSession {
+
+    public static final String USER_LOGIN_INFO = "USER_LOGIN_INFO";
+
+    public static final String VERIFY_CODE = "VERIFY_CODE";
+
+}

+ 22 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/LoginType.java

@@ -0,0 +1,22 @@
+package com.kuyuntech.vrv.coreapi.constant.core;
+
+
+/**
+ * 登录方式常量类
+ * @author linzhm
+ * @version 2019年6月24日14:53:19
+ * @description  主要存放登录方式的常量定义
+ */
+public class LoginType {
+
+
+    //账号方式
+    public static final String ACCOUNT = "1";
+
+    //邮箱方式
+    public static final String EMAIL = "2";
+
+    //手机号码
+    public static final String MOBILE = "3";
+
+}

+ 9 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/VerifyCodeStatus.java

@@ -0,0 +1,9 @@
+package com.kuyuntech.vrv.coreapi.constant.core;
+
+public class VerifyCodeStatus {
+
+    public static final String UN_VERIFY = "0";
+
+    public static final String VERIFYIED = "1";
+
+}

+ 9 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/constant/core/VerifyCodeType.java

@@ -0,0 +1,9 @@
+package com.kuyuntech.vrv.coreapi.constant.core;
+
+public class VerifyCodeType {
+
+    public static final String IMG = "0" ;
+
+    public static final String SMS = "1" ;
+
+}

+ 0 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/service/core/.gitignore


+ 10 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/service/core/AuthService.java

@@ -0,0 +1,10 @@
+package com.kuyuntech.vrv.coreapi.service.core;
+
+import com.kuyuntech.vrv.coreapi.bean.auth.PassportBean;
+import com.kuyuntech.vrv.coreapi.bean.core.UserBean;
+
+public interface AuthService {
+    boolean updateUserPassword(UserBean userBean, String newPassword);
+
+    UserBean login(UserBean userBean);
+}

+ 97 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/service/core/DeviceService.java

@@ -0,0 +1,97 @@
+package com.kuyuntech.vrv.coreapi.service.core;
+
+import com.kuyuntech.vrv.coreapi.bean.core.DeviceBean;
+import com.wbspool.fastboot.core.common.bean.PagerBean;
+import java.util.List;
+
+/**
+ * DeviceService
+ *
+ */
+public interface DeviceService  {
+
+    
+
+    /**
+     * 新增记录
+     * @param deviceBean 新增参数
+     * @return 如果成功返回对应bean,否则返回null
+     */
+     DeviceBean add(DeviceBean deviceBean);
+
+    /**
+     * 更新记录
+     * @param deviceBean 更新参数
+     * @return 如果成功返回对应bean,否则返回null
+     */
+     DeviceBean update(DeviceBean deviceBean);
+
+    /**
+     * 删除记录
+     * @param deviceBean 删除参数
+     * @return 如果成功返回对应bean,否则返回null
+     */
+    DeviceBean delete(DeviceBean deviceBean);
+
+    /**
+     * 查找一条记录
+     * @param deviceBean 查找参数
+     * @return 如果成功返回对应bean,否则返回null
+     */
+    DeviceBean find(DeviceBean deviceBean);
+
+    /**
+     * 通过唯一标识查找记录
+     * @param code 用户标识
+     * @return 记录存在返回对应的bean,否则返回null
+     */
+     DeviceBean find(String code);
+
+    /**
+     * 分页查找多条记录
+     * @param deviceBean 查找参数
+     * @param pagerBean  分页参数
+     * @return 记录存在返回对应的bean集合,否则返回空集合
+     */
+     List<DeviceBean> findAll(DeviceBean deviceBean, PagerBean pagerBean);
+
+
+
+    /**
+     * 查找所有记录
+     * @param deviceBean 查找参数
+     * @return 记录存在返回对应的bean集合,否则返回空集合
+     */
+     List<DeviceBean> findAll(DeviceBean deviceBean);
+
+
+    /**
+     * 统计所有记录
+     * @param deviceBean 统计参数
+     * @return 记录存在返回对应的bean集合,否则返回空集合
+     */
+     Long countAll(DeviceBean deviceBean);
+
+    /**
+     * 分页查找多条记录
+     * @param deviceBean 查询条件参数
+     * @param pagerBean 分页参数
+     * @return 返回查询结果的Pager封装
+     */
+     PagerBean<DeviceBean> findPager(DeviceBean deviceBean, PagerBean pagerBean);
+
+    /**
+     * 批量删除
+     * @param deviceBeans 批量删除元素集合
+     */
+     void batchDelete(List<DeviceBean> deviceBeans);
+
+    /**
+     * 批量删除
+     * @param codes 唯一标识集合
+     */
+    void batchDeleteByCodes(List<String> codes);
+
+    
+
+}

+ 2 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/service/core/UserService.java

@@ -101,4 +101,6 @@ public interface UserService  {
 
 
     UserBean bindRole(UserBean userBean);
+
+    boolean updateUserPassword(UserBean userBean, String newPassword);
 }

+ 98 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/service/core/VerifyCodeService.java

@@ -0,0 +1,98 @@
+package com.kuyuntech.vrv.coreapi.service.core;
+
+import com.kuyuntech.vrv.coreapi.bean.core.VerifyCodeBean;
+import com.wbspool.fastboot.core.common.bean.PagerBean;
+
+import java.util.List;
+
+/**
+ * VerifyCodeService
+ *
+ */
+public interface VerifyCodeService  {
+
+    
+
+    /**
+     * 新增记录
+     * @param verifyCodeBean 新增参数
+     * @return 如果成功返回对应bean,否则返回null
+     */
+     VerifyCodeBean add(VerifyCodeBean verifyCodeBean);
+
+    /**
+     * 更新记录
+     * @param verifyCodeBean 更新参数
+     * @return 如果成功返回对应bean,否则返回null
+     */
+     VerifyCodeBean update(VerifyCodeBean verifyCodeBean);
+
+    /**
+     * 删除记录
+     * @param verifyCodeBean 删除参数
+     * @return 如果成功返回对应bean,否则返回null
+     */
+    VerifyCodeBean delete(VerifyCodeBean verifyCodeBean);
+
+    /**
+     * 查找一条记录
+     * @param verifyCodeBean 查找参数
+     * @return 如果成功返回对应bean,否则返回null
+     */
+    VerifyCodeBean find(VerifyCodeBean verifyCodeBean);
+
+    /**
+     * 通过唯一标识查找记录
+     * @param code 用户标识
+     * @return 记录存在返回对应的bean,否则返回null
+     */
+     VerifyCodeBean find(String code);
+
+    /**
+     * 分页查找多条记录
+     * @param verifyCodeBean 查找参数
+     * @param pagerBean  分页参数
+     * @return 记录存在返回对应的bean集合,否则返回空集合
+     */
+     List<VerifyCodeBean> findAll(VerifyCodeBean verifyCodeBean, PagerBean pagerBean);
+
+
+
+    /**
+     * 查找所有记录
+     * @param verifyCodeBean 查找参数
+     * @return 记录存在返回对应的bean集合,否则返回空集合
+     */
+     List<VerifyCodeBean> findAll(VerifyCodeBean verifyCodeBean);
+
+
+    /**
+     * 统计所有记录
+     * @param verifyCodeBean 统计参数
+     * @return 记录存在返回对应的bean集合,否则返回空集合
+     */
+     Long countAll(VerifyCodeBean verifyCodeBean);
+
+    /**
+     * 分页查找多条记录
+     * @param verifyCodeBean 查询条件参数
+     * @param pagerBean 分页参数
+     * @return 返回查询结果的Pager封装
+     */
+     PagerBean<VerifyCodeBean> findPager(VerifyCodeBean verifyCodeBean, PagerBean pagerBean);
+
+    /**
+     * 批量删除
+     * @param verifyCodeBeans 批量删除元素集合
+     */
+     void batchDelete(List<VerifyCodeBean> verifyCodeBeans);
+
+    /**
+     * 批量删除
+     * @param codes 唯一标识集合
+     */
+    void batchDeleteByCodes(List<String> codes);
+
+    
+
+}

+ 18 - 0
sources/server/vrv/vrv-core-api/src/main/java/com/kuyuntech/vrv/coreapi/until/core/PasswordEncryptUtils.java

@@ -0,0 +1,18 @@
+package com.kuyuntech.vrv.coreapi.until.core;
+
+import org.apache.commons.codec.digest.DigestUtils;
+
+import java.util.Base64;
+
+/**
+ * 密码加密工具类
+ * @author linzhm
+ * @version 2019年6月24日15:33:28
+ */
+public class PasswordEncryptUtils {
+
+    public static String encrypt(String password) {
+        return DigestUtils.md5Hex(Base64.getEncoder().encodeToString(password.getBytes()));
+    }
+
+}

+ 3 - 1
sources/server/vrv/vrv-core-service/pom.xml

@@ -141,7 +141,9 @@
             <groupId>com.kuyuntech</groupId>
             <artifactId>vrv-core-api</artifactId>
         </dependency>
-        
+
+
+
 
 
     </dependencies>

+ 1 - 1
sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/dao/core/DeviceParamDao.java

@@ -15,7 +15,7 @@ public interface DeviceParamDao extends FastbootRepository<DeviceParam,Long> {
     
 
    
-   DeviceParam findByCodeAndValid(String code,Short valid);
+   DeviceParam findByCodeAndValid(String code, Short valid);
    
 
    

+ 1 - 8
sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/domain/core/DeviceParam.java

@@ -2,12 +2,10 @@ package com.kuyuntech.vrv.coreservice.domain.core;
 
 import com.wbspool.fastboot.core.jpa.entiy.FastbootEntity;
 import lombok.*;
-import sun.security.pkcs11.P11Util;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Table;
-import javax.rmi.CORBA.Util;
 
 @EqualsAndHashCode(callSuper = true)
 @Entity
@@ -17,6 +15,7 @@ import javax.rmi.CORBA.Util;
 @Builder
 @Table(name = "vrv_device_param")
 public class DeviceParam extends FastbootEntity {
+
     @Column(columnDefinition = "varchar(255) COMMENT '设备SN'")
     private String sn;
 
@@ -40,10 +39,4 @@ public class DeviceParam extends FastbootEntity {
 
     @Column(columnDefinition = "varchar(255) COMMENT '关联网关'")
     private String gatewayCode;
-
-    @Column(columnDefinition = "varchar(255) COMMENT '参数名称'")
-    private String name;
-
-    @Column(columnDefinition = "text COMMENT '参数值'")
-    private String value;
 }

+ 42 - 0
sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/domain/core/VerifyCode.java

@@ -0,0 +1,42 @@
+package com.kuyuntech.vrv.coreservice.domain.core;
+
+import com.wbspool.fastboot.core.jpa.entiy.FastbootEntity;
+import lombok.*;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * 操作验证码表
+ *
+ * @author linzhm
+ * @version 2019年6月15日16:38:06
+ * @description 操作验证码表对应实体
+ */
+@EqualsAndHashCode(callSuper = true)
+@Entity
+@Table(name = "fb_auth_verify_code")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class VerifyCode extends FastbootEntity {
+
+
+    @Column(columnDefinition = "varchar(255) COMMENT '验证码类型'")
+    private String type;
+
+
+    @Column(columnDefinition = "varchar(255) COMMENT '验证码'")
+    private String verifyCode;
+
+
+    @Column(columnDefinition = "varchar(255) COMMENT '有效期'")
+    private Long expireTime;
+
+
+    @Column(columnDefinition = "varchar(255) COMMENT '是否已验证'")
+    private String verified;
+
+}

+ 49 - 0
sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/service/core/impl/AuthServiceImpl.java

@@ -0,0 +1,49 @@
+package com.kuyuntech.vrv.coreservice.service.core.impl;
+
+import com.kuyuntech.vrv.coreapi.bean.auth.PassportBean;
+import com.kuyuntech.vrv.coreapi.bean.core.UserBean;
+import com.kuyuntech.vrv.coreapi.service.core.AuthService;
+import com.kuyuntech.vrv.coreapi.service.core.UserService;
+import com.kuyuntech.vrv.coreapi.until.core.PasswordEncryptUtils;
+import com.kuyuntech.vrv.coreservice.dao.core.UserDao;
+import com.kuyuntech.vrv.coreservice.domain.core.User;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+
+@Service("authService")
+@Transactional(rollbackFor = Exception.class, transactionManager = "vrvCoreServiceTransactionManager")
+public class AuthServiceImpl implements AuthService {
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private UserDao userDao;
+
+    @Override
+    public boolean updateUserPassword(UserBean userBean, String newPassword) {
+
+
+        Assert.hasText(userBean.getCode(), "passport code 不能为空!");
+
+
+        return this.userService.updateUserPassword(UserBean.builder().code(userBean.getCode()).build(), newPassword);
+
+    }
+
+
+    @Override
+    public UserBean login(UserBean userBean) {
+        if (userBean == null) {
+            return null;
+        }
+
+        userBean = userService.login(userBean);
+
+        return userBean;
+    }
+}

+ 2 - 3
sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/service/core/impl/DeviceParamServiceImpl.java

@@ -3,21 +3,20 @@ package com.kuyuntech.vrv.coreservice.service.core.impl;
 
 import com.kuyuntech.vrv.coreapi.service.core.DeviceParamService;
 import com.kuyuntech.vrv.coreservice.dao.core.DeviceParamDao;
+import com.kuyuntech.vrv.coreservice.domain.core.DeviceParam;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import com.kuyuntech.vrv.coreapi.bean.core.DeviceParamBean;
-import com.kuyuntech.vrv.coreservice.domain.core.DeviceParam;
 import com.wbspool.fastboot.core.common.bean.PagerBean;
 import java.util.List;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.BeanUtils;
-import org.apache.commons.lang3.StringUtils;
 import org.hibernate.criterion.DetachedCriteria;
 import org.hibernate.criterion.Restrictions;
 import java.util.ArrayList;
-import org.hibernate.criterion.Order;
+
 import com.wbspool.fastboot.core.jpa.service.AbstractFastbootService;
 import org.springframework.util.Assert;
 import static com.wbspool.fastboot.core.jpa.constant.DataValidTypes.*;

+ 26 - 15
sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/service/core/impl/UserServiceImpl.java

@@ -2,6 +2,7 @@ package com.kuyuntech.vrv.coreservice.service.core.impl;
 
 
 import com.kuyuntech.vrv.coreapi.service.core.UserService;
+import com.kuyuntech.vrv.coreapi.until.core.PasswordEncryptUtils;
 import com.kuyuntech.vrv.coreservice.dao.core.RoleDao;
 import com.kuyuntech.vrv.coreservice.dao.core.UserDao;
 import com.kuyuntech.vrv.coreservice.domain.core.Role;
@@ -13,6 +14,7 @@ import com.kuyuntech.vrv.coreapi.bean.core.UserBean;
 import com.kuyuntech.vrv.coreservice.domain.core.User;
 import com.wbspool.fastboot.core.common.bean.PagerBean;
 
+import java.util.Date;
 import java.util.List;
 
 import org.slf4j.Logger;
@@ -62,14 +64,12 @@ public class UserServiceImpl extends AbstractFastbootService<User, UserBean> imp
     public UserBean login(UserBean userBean) {
 
         if (userBean == null) {
-
             return null;
         }
 
         User user = userDao.findByAccountAndPasswordAndValid(userBean.getAccount(), userBean.getPassword(), VALID);
 
         if (user == null) {
-
             return null;
         }
 
@@ -196,18 +196,20 @@ public class UserServiceImpl extends AbstractFastbootService<User, UserBean> imp
 
         if (userBean != null) {
             if (StringUtils.isNotBlank(userBean.getRealname())) {
-                detachedCriteria.add(Restrictions.like("realname", userBean.getRealname(),MatchMode.ANYWHERE));
+                detachedCriteria.add(Restrictions.like("realname", userBean.getRealname(), MatchMode.ANYWHERE));
             }
             if (StringUtils.isNotBlank(userBean.getAccount())) {
-                detachedCriteria.add(Restrictions.eq("account", userBean.getAccount()));
+                detachedCriteria.add(Restrictions.like("account", userBean.getAccount(), MatchMode.ANYWHERE));
+            }
+            if (StringUtils.isNotBlank(userBean.getRoleFlag())) {
+                detachedCriteria.add(Restrictions.eq("roleFlag", userBean.getRoleFlag()));
             }
             if (StringUtils.isNotBlank(userBean.getPhone())) {
-                detachedCriteria.add(Restrictions.like("phone", userBean.getPhone(),MatchMode.ANYWHERE));
+                detachedCriteria.add(Restrictions.like("phone", userBean.getPhone(), MatchMode.ANYWHERE));
             }
 
         }
 
-
         detachedCriteria.add(Restrictions.eq("valid", VALID));
         return detachedCriteria;
     }
@@ -255,22 +257,31 @@ public class UserServiceImpl extends AbstractFastbootService<User, UserBean> imp
 
         String roleFlag = userBean.getRoleFlag();
 
-        if (user.getRoleFlag().equals(roleFlag)) {
-            Role role = roleDao.findByFlagAndValid(roleFlag, VALID);
+        Role role = roleDao.findByFlagAndValid(roleFlag, VALID);
+
+        user.setRoleCode(role.getCode());
+
+        userDao.save(user);
+
+        domainToBean(user, userBean);
 
-            userBean.setRoleCode(role.getCode());
+        return userBean;
+    }
 
-            user.setRoleCode(role.getCode());
+    @Override
+    public boolean updateUserPassword(UserBean userBean, String newPassword) {
 
-            userDao.save(user);
+        Assert.hasText(userBean.getCode(), "userBean.code不能为空");
 
-            domainToBean(user, userBean);
+        User user = this.userDao.findByCodeAndValid(userBean.getCode(), VALID);
 
-            return userBean;
-        }
+        Assert.notNull(user, "用户不存在");
+
+        user.setPassword(newPassword);
 
+        this.userDao.save(user);
 
-        return null;
+        return true;
     }
 
 

+ 208 - 0
sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/service/core/impl/VerifyCodeServiceImpl.java

@@ -0,0 +1,208 @@
+package com.kuyuntech.vrv.coreservice.service.core.impl;
+
+
+import com.kuyuntech.vrv.coreapi.bean.core.VerifyCodeBean;
+import com.kuyuntech.vrv.coreapi.service.core.VerifyCodeService;
+import com.kuyuntech.vrv.coreservice.dao.core.VerifyCodeDao;
+import com.kuyuntech.vrv.coreservice.domain.core.VerifyCode;
+import com.wbspool.fastboot.core.common.bean.PagerBean;
+import com.wbspool.fastboot.core.jpa.service.AbstractFastbootService;
+import org.hibernate.criterion.DetachedCriteria;
+import org.hibernate.criterion.Restrictions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.wbspool.fastboot.core.jpa.constant.DataValidTypes.INVALID;
+import static com.wbspool.fastboot.core.jpa.constant.DataValidTypes.VALID;
+
+
+
+
+
+/**
+* VerifyCodeService
+*
+*/
+@Service("verifyCodeService")
+@Transactional(rollbackFor = Exception.class,transactionManager = "authCompCoreServiceTransactionManager")
+public class VerifyCodeServiceImpl extends AbstractFastbootService<VerifyCode, VerifyCodeBean> implements VerifyCodeService {
+
+    private static final Logger logger = LoggerFactory.getLogger(VerifyCodeServiceImpl.class);
+
+    @Autowired
+    VerifyCodeDao verifyCodeDao;
+
+    
+
+    @Override
+    public VerifyCodeBean add(VerifyCodeBean verifyCodeBean) {
+
+        VerifyCode verifyCode = new VerifyCode();
+        beanToDomain(verifyCodeBean,verifyCode,"id");
+        verifyCodeDao.save(verifyCode);
+        domainToBean(verifyCode,verifyCodeBean);
+        return verifyCodeBean;
+
+    }
+
+    @Override
+    public VerifyCodeBean update(VerifyCodeBean verifyCodeBean) {
+
+        if(verifyCodeBean == null ){
+            return null ;
+        }
+
+        
+        VerifyCode verifyCode = verifyCodeDao.findByCodeAndValid(verifyCodeBean.getCode(),VALID);
+        
+
+        if(verifyCode == null){
+            return null;
+        }
+
+        beanToDomain(verifyCodeBean,verifyCode,"id","code","version","createTime","updateTime","valid");
+
+        verifyCodeDao.save(verifyCode);
+
+        domainToBean(verifyCode,verifyCodeBean);
+
+        return verifyCodeBean;
+    }
+
+    @Override
+    public VerifyCodeBean delete(VerifyCodeBean verifyCodeBean) {
+
+        if(verifyCodeBean == null){
+            return null ;
+        }
+
+        
+        VerifyCode verifyCode = verifyCodeDao.findByCodeAndValid(verifyCodeBean.getCode(),VALID);
+        
+
+
+        if(verifyCode == null){
+            return null;
+        }
+
+        
+        verifyCode.setValid(INVALID);
+        verifyCodeDao.save(verifyCode);
+        
+
+        domainToBean(verifyCode,verifyCodeBean);
+
+        return verifyCodeBean;
+    }
+
+    @Override
+    public VerifyCodeBean find(VerifyCodeBean verifyCodeBean) {
+        if(verifyCodeBean == null){
+            return null ;
+        }
+
+        
+        VerifyCode verifyCode = verifyCodeDao.findByCodeAndValid(verifyCodeBean.getCode(),VALID);
+        
+
+
+        if(verifyCode == null){
+            return null ;
+        }
+        BeanUtils.copyProperties(verifyCode,verifyCodeBean);
+        return verifyCodeBean;
+    }
+
+    @Override
+    public VerifyCodeBean find(String code) {
+        return  this.find(VerifyCodeBean.builder().code(code).build());
+    }
+
+    @Override
+    public List<VerifyCodeBean> findAll(VerifyCodeBean verifyCodeBean, PagerBean pagerBean) {
+        List<VerifyCodeBean> verifyCodeBeans = new ArrayList<>();
+        DetachedCriteria detachedCriteria = createListCriteria(verifyCodeBean);
+        List<VerifyCode> verifyCodes = verifyCodeDao.findAll(detachedCriteria,pagerBean);
+        for (VerifyCode verifyCode : verifyCodes) {
+            VerifyCodeBean verifyCodeBeanTemp = new VerifyCodeBean();
+            domainToBean(verifyCode,verifyCodeBeanTemp);
+            verifyCodeBeans.add(verifyCodeBeanTemp);
+        }
+        return verifyCodeBeans;
+    }
+
+    @Override
+    public List<VerifyCodeBean> findAll(VerifyCodeBean verifyCodeBean) {
+       return  this.findAll(verifyCodeBean,null);
+    }
+
+    @Override
+     public Long countAll(VerifyCodeBean verifyCodeBean) {
+        DetachedCriteria detachedCriteria = createListCriteria(verifyCodeBean);
+        return verifyCodeDao.countAll(detachedCriteria);
+    }
+
+     @Override
+     public PagerBean<VerifyCodeBean> findPager(VerifyCodeBean verifyCodeBean, PagerBean pagerBean) {
+        List<VerifyCodeBean> verifyCodeBeans = this.findAll(verifyCodeBean, pagerBean);
+        Long count = this.countAll(verifyCodeBean);
+        PagerBean<VerifyCodeBean> verifyCodePageBean = new PagerBean<>();
+        BeanUtils.copyProperties(pagerBean, verifyCodePageBean);
+        verifyCodePageBean.setItemCount(count.intValue());
+        verifyCodePageBean.init();
+        verifyCodePageBean.setItems(verifyCodeBeans);
+        return  verifyCodePageBean ;
+     }
+
+     /**
+      * 创建列表查询条件
+      * @param verifyCodeBean 查询参数
+      * @return
+      */
+     private static DetachedCriteria createListCriteria(VerifyCodeBean verifyCodeBean){
+         DetachedCriteria detachedCriteria = DetachedCriteria.forClass(VerifyCode.class);
+         detachedCriteria.add(Restrictions.eq("valid",VALID));
+         return  detachedCriteria;
+     }
+
+
+
+    @Override
+    public void batchDelete(List<VerifyCodeBean> verifyCodeBean) {
+        if(verifyCodeBean.isEmpty()){
+            return ;
+        }
+        List<String> codes = new ArrayList<>();
+       verifyCodeBean.forEach((e) ->{
+          codes.add(e.getCode());
+        });
+        batchDeleteByCodes(codes);
+
+    }
+
+
+    @Override
+    public void batchDeleteByCodes(List<String> codes) {
+
+        if(codes.isEmpty()){
+        return ;
+        }
+
+        for (String code : codes) {
+            Assert.notNull(this.delete(VerifyCodeBean.builder().code(code).build()),"batch delete by codes error! ");
+        }
+
+    }
+
+    
+
+
+}

+ 256 - 0
sources/server/vrv/vrv-core-service/src/main/java/com/kuyuntech/vrv/coreservice/util/core/ValidateCodeGenerator.java

@@ -0,0 +1,256 @@
+package com.kuyuntech.vrv.coreservice.util.core;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Arrays;
+import java.util.Random;
+
+public class ValidateCodeGenerator {
+
+    //使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符
+    public static final String VERIFY_CODES = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
+
+    private static Random random = new Random();
+
+
+    /**
+     * 使用系统默认字符源生成验证码
+     * @param verifySize    验证码长度
+     * @return
+     */
+    public static String generateVerifyCode(int verifySize){
+        return generateVerifyCode(verifySize, VERIFY_CODES);
+    }
+    /**
+     * 使用指定源生成验证码
+     * @param verifySize    验证码长度
+     * @param sources   验证码字符源
+     * @return
+     */
+    public static String generateVerifyCode(int verifySize, String sources){
+        if(sources == null || sources.length() == 0){
+            sources = VERIFY_CODES;
+        }
+        int codesLen = sources.length();
+        Random rand = new Random(System.currentTimeMillis());
+        StringBuilder verifyCode = new StringBuilder(verifySize);
+        for(int i = 0; i < verifySize; i++){
+            verifyCode.append(sources.charAt(rand.nextInt(codesLen-1)));
+        }
+        return verifyCode.toString();
+    }
+
+    /**
+     * 生成随机验证码文件,并返回验证码值
+     * @param w
+     * @param h
+     * @param outputFile
+     * @param verifySize
+     * @return
+     * @throws IOException
+     */
+    public static String outputVerifyImage(int w, int h, File outputFile, int verifySize) throws IOException {
+        String verifyCode = generateVerifyCode(verifySize);
+        outputImage(w, h, outputFile, verifyCode);
+        return verifyCode;
+    }
+
+    /**
+     * 输出随机验证码图片流,并返回验证码值
+     * @param w
+     * @param h
+     * @param os
+     * @param verifySize
+     * @return
+     * @throws IOException
+     */
+    public static String outputVerifyImage(int w, int h, OutputStream os, int verifySize) throws IOException{
+        String verifyCode = generateVerifyCode(verifySize);
+        outputImage(w, h, os, verifyCode);
+        return verifyCode;
+    }
+
+    /**
+     * 生成指定验证码图像文件
+     * @param w
+     * @param h
+     * @param outputFile
+     * @param code
+     * @throws IOException
+     */
+    public static void outputImage(int w, int h, File outputFile, String code) throws IOException{
+        if(outputFile == null){
+            return;
+        }
+        File dir = outputFile.getParentFile();
+        if(!dir.exists()){
+            dir.mkdirs();
+        }
+        try{
+            outputFile.createNewFile();
+            FileOutputStream fos = new FileOutputStream(outputFile);
+            outputImage(w, h, fos, code);
+            fos.close();
+        } catch(IOException e){
+            throw e;
+        }
+    }
+
+    /**
+     * 输出指定验证码图片流
+     * @param w
+     * @param h
+     * @param os
+     * @param code
+     * @throws IOException
+     */
+    public static void outputImage(int w, int h, OutputStream os, String code) throws IOException{
+        int verifySize = code.length();
+        BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
+        Random rand = new Random();
+        Graphics2D g2 = image.createGraphics();
+        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
+        Color[] colors = new Color[5];
+        Color[] colorSpaces = new Color[] { Color.WHITE, Color.CYAN,
+                Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE,
+                Color.PINK, Color.YELLOW };
+        float[] fractions = new float[colors.length];
+        for(int i = 0; i < colors.length; i++){
+            colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)];
+            fractions[i] = rand.nextFloat();
+        }
+        Arrays.sort(fractions);
+
+        g2.setColor(Color.GRAY);// 设置边框色
+        g2.fillRect(0, 0, w, h);
+
+        Color c = getRandColor(200, 250);
+        g2.setColor(c);// 设置背景色
+        g2.fillRect(0, 2, w, h-4);
+
+        //绘制干扰线
+        Random random = new Random();
+        g2.setColor(getRandColor(160, 200));// 设置线条的颜色
+        for (int i = 0; i < 20; i++) {
+            int x = random.nextInt(w - 1);
+            int y = random.nextInt(h - 1);
+            int xl = random.nextInt(6) + 1;
+            int yl = random.nextInt(12) + 1;
+            g2.drawLine(x, y, x + xl + 40, y + yl + 20);
+        }
+
+        // 添加噪点
+        float yawpRate = 0.05f;// 噪声率
+        int area = (int) (yawpRate * w * h);
+        for (int i = 0; i < area; i++) {
+            int x = random.nextInt(w);
+            int y = random.nextInt(h);
+            int rgb = getRandomIntColor();
+            image.setRGB(x, y, rgb);
+        }
+
+        shear(g2, w, h, c);// 使图片扭曲
+
+        g2.setColor(getRandColor(100, 160));
+        int fontSize = h-4;
+        Font font = new Font("Algerian", Font.ITALIC, fontSize);
+        g2.setFont(font);
+        char[] chars = code.toCharArray();
+        for(int i = 0; i < verifySize; i++){
+            AffineTransform affine = new AffineTransform();
+            affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), (w / verifySize) * i + fontSize/2, h/2);
+            g2.setTransform(affine);
+            g2.drawChars(chars, i, 1, ((w-10) / verifySize) * i + 5, h/2 + fontSize/2 - 10);
+        }
+
+        g2.dispose();
+        ImageIO.write(image, "jpg", os);
+    }
+
+    private static Color getRandColor(int fc, int bc) {
+        if (fc > 255)
+            fc = 255;
+        if (bc > 255)
+            bc = 255;
+        int r = fc + random.nextInt(bc - fc);
+        int g = fc + random.nextInt(bc - fc);
+        int b = fc + random.nextInt(bc - fc);
+        return new Color(r, g, b);
+    }
+
+    private static int getRandomIntColor() {
+        int[] rgb = getRandomRgb();
+        int color = 0;
+        for (int c : rgb) {
+            color = color << 8;
+            color = color | c;
+        }
+        return color;
+    }
+
+    private static int[] getRandomRgb() {
+        int[] rgb = new int[3];
+        for (int i = 0; i < 3; i++) {
+            rgb[i] = random.nextInt(255);
+        }
+        return rgb;
+    }
+
+    private static void shear(Graphics g, int w1, int h1, Color color) {
+        shearX(g, w1, h1, color);
+        shearY(g, w1, h1, color);
+    }
+
+    private static void shearX(Graphics g, int w1, int h1, Color color) {
+
+        int period = random.nextInt(2);
+
+        boolean borderGap = true;
+        int frames = 1;
+        int phase = random.nextInt(2);
+
+        for (int i = 0; i < h1; i++) {
+            double d = (double) (period >> 1)
+                    * Math.sin((double) i / (double) period
+                    + (6.2831853071795862D * (double) phase)
+                    / (double) frames);
+            g.copyArea(0, i, w1, 1, (int) d, 0);
+            if (borderGap) {
+                g.setColor(color);
+                g.drawLine((int) d, i, 0, i);
+                g.drawLine((int) d + w1, i, w1, i);
+            }
+        }
+
+    }
+
+    private static void shearY(Graphics g, int w1, int h1, Color color) {
+
+        int period = random.nextInt(40) + 10; // 50;
+
+        boolean borderGap = true;
+        int frames = 20;
+        int phase = 7;
+        for (int i = 0; i < w1; i++) {
+            double d = (double) (period >> 1)
+                    * Math.sin((double) i / (double) period
+                    + (6.2831853071795862D * (double) phase)
+                    / (double) frames);
+            g.copyArea(i, 0, 1, h1, 0, (int) d);
+            if (borderGap) {
+                g.setColor(color);
+                g.drawLine(i, (int) d, i, 0);
+                g.drawLine(i, (int) d + h1, i, h1);
+            }
+
+        }
+
+    }
+
+}

+ 191 - 0
sources/server/vrv/vrv-platform/src/main/java/com/kuyuntech/vrv/platform/controller/auth/AuthController.java

@@ -0,0 +1,191 @@
+package com.kuyuntech.vrv.platform.controller.auth;
+
+
+import com.kuyuntech.vrv.coreapi.bean.core.UserBean;
+import com.kuyuntech.vrv.coreapi.service.core.AuthService;
+import com.kuyuntech.vrv.coreapi.service.core.UserService;
+import com.kuyuntech.vrv.coreapi.service.core.VerifyCodeService;
+import com.kuyuntech.vrv.coreservice.util.core.ValidateCodeGenerator;
+import com.wbspool.fastboot.core.common.bean.ResponseBean;
+import com.wbspool.fastboot.core.common.builder.MapBuilder;
+import com.wbspool.fastboot.core.web.result.ParamErrorResultBuilder;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.validation.Errors;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * 登录验证
+ *
+ * @author
+ * @description
+ */
+@RestController
+public class AuthController {
+
+    @Autowired
+    private AuthService authService;
+    @Autowired
+    private UserService userService;
+
+    @Value("${fastboot.auth.login-verify-code:true}")
+    private Boolean verifyCodeCheck;
+
+    final VerifyCodeService verifyCodeService;
+
+    public AuthController(VerifyCodeService verifyCodeService) {
+        this.verifyCodeService = verifyCodeService;
+    }
+
+
+    /**
+     * 获取验证码图片
+     *
+     * @return
+     */
+    @RequestMapping
+    public void verifyCode(Integer width, Integer height, HttpServletRequest request, HttpServletResponse response) throws IOException {
+
+        String verifyCode = ValidateCodeGenerator.generateVerifyCode(4);
+        Long createTime = System.currentTimeMillis();
+        System.out.println(createTime);
+        System.out.println("VerifyCode: " + verifyCode);
+
+
+        request.getSession().setAttribute("verifyCode", verifyCode);
+        request.getSession().setAttribute("createTime", createTime);
+
+    }
+
+    @RequestMapping
+    public Object login(@Validated UserBean userBean, String encrypt, Errors errors, HttpServletRequest request) {
+
+
+        //校验验证码是否正确
+        if (this.verifyCodeCheck) {
+
+            if (StringUtils.isEmpty(userBean.getVerifyCode())) {
+                return ParamErrorResultBuilder.newBuilder().paramError("verifyCode", "验证码不能为空").build();
+            }
+
+            String verifyCode = (String) request.getSession().getAttribute("verifyCode");
+
+            if (verifyCode == null) {
+                return ParamErrorResultBuilder.newBuilder().paramError("verifyCode", "没有获取到验证码").build();
+            }
+
+            Long expireTime = 50000L;
+
+            Long createTime = (Long) request.getSession().getAttribute("createTime");
+
+            //判断有效期
+//            if ((System.currentTimeMillis() - createTime) > expireTime) {
+//                return ParamErrorResultBuilder.newBuilder().paramError("verifyCode", "验证码已过期").build();
+//            }
+
+            if (!verifyCode.toLowerCase().equals(userBean.getVerifyCode().toLowerCase())) {
+                return ParamErrorResultBuilder.newBuilder().paramError("verifyCode", "验证码错误").build();
+            }
+        }
+
+        //验证账号和密码
+        userBean = this.authService.login(userBean);
+
+
+        if (userBean == null) {
+            return ResponseBean.serverError("账号或密码错误");
+        }
+
+        request.getSession().removeAttribute("verifyCode");
+
+        request.getSession().setAttribute("userBean", userBean);
+
+        return ResponseBean.success("登录成功").addData("userBean", userBean);
+    }
+
+    /**
+     * 更新当前用户密码接口
+     *
+     * @return
+     */
+    @RequestMapping
+    public Object updateUserPassword(String newPassword, String oldPassword, HttpServletRequest request) {
+
+        UserBean userBean = (UserBean) request.getSession().getAttribute("userBean");
+
+        if (userBean == null) {
+            return ResponseBean.unAuthorize("您未登录");
+        }
+
+        if (!oldPassword.equals(userBean.getPassword())) {
+            return ParamErrorResultBuilder.newBuilder().paramError("oldPassword", "原密码不正确").build();
+        }
+
+        if (!this.authService.updateUserPassword(userBean, newPassword)) {
+            return ResponseBean.serverError("修改密码失败");
+        }
+
+        this.logout(request);
+
+        return ResponseBean.success("密码修改成功,请退出重新登录!");
+
+    }
+
+    @RequestMapping
+    public Object logout(HttpServletRequest request) {
+
+        UserBean userBean = (UserBean) request.getSession().getAttribute("userBean");
+
+        if (userBean == null) {
+            return ResponseBean.unAuthorize("您未登录");
+        }
+
+        request.getSession().invalidate();
+
+        return ResponseBean.serverError("退出成功!");
+    }
+
+    /**
+     * 获取当前用户信息接口
+     *
+     * @return
+     */
+    @RequestMapping
+    public Object userInfo(HttpServletRequest request) {
+
+        UserBean userBean = (UserBean) request.getSession().getAttribute("userBean");
+
+
+        if (userBean == null) {
+            return ResponseBean.unAuthorize("您未登录");
+        }
+
+        userBean = this.userService.find(userBean);
+
+
+        Map userMap = MapBuilder.newBuilder()
+                .put("realname", userBean.getRealname())
+                .put("account", userBean.getAccount())
+                .put("phone", userBean.getPhone())
+                .put("password", userBean.getPassword())
+                .put("roleCode", userBean.getRoleCode())
+                .put("roleFlag", userBean.getRoleFlag())
+                .put("operatorCode", userBean.getOperatorCode())
+                .put("operatorNumber", userBean.getOperatorNumber())
+                .put("code", userBean.getCode())
+                .put("createTime", userBean.getCreateTime())
+                .put("updateTime", userBean.getUpdateTime())
+                .build();
+
+        return ResponseBean.success("操作成功!").addData("user", userMap);
+    }
+
+}

+ 0 - 39
sources/server/vrv/vrv-platform/src/main/java/com/kuyuntech/vrv/platform/controller/core/AuthController.java

@@ -1,39 +0,0 @@
-package com.kuyuntech.vrv.platform.controller.core;
-
-import com.kuyuntech.vrv.coreapi.bean.core.RoleBean;
-import com.kuyuntech.vrv.coreapi.bean.core.UserBean;
-import com.kuyuntech.vrv.coreapi.service.core.UserService;
-import com.wbspool.fastboot.core.common.bean.ResponseBean;
-import com.wbspool.fastboot.core.common.constant.ValidGroup;
-import com.wbspool.fastboot.core.web.annotation.ParamErrorAutoResponse;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-public class AuthController {
-
-    @Autowired
-    UserService userService;
-
-    /**
-     * 登录
-     * @param userBean
-     * @return
-     */
-    @RequestMapping
-    @ParamErrorAutoResponse
-    public Object login(UserBean userBean) {
-
-        userBean = this.userService.login(userBean);
-
-        if (userBean == null) {
-            return ResponseBean.serverError("用户名或密码错误,操作失败!");
-        }
-
-        return ResponseBean.success("登录成功!");
-    }
-
-
-}

+ 193 - 0
sources/server/vrv/vrv-platform/src/main/java/com/kuyuntech/vrv/platform/controller/core/VerifyCodeController.java

@@ -0,0 +1,193 @@
+package com.kuyuntech.vrv.platform.controller.core;
+
+
+import com.kuyuntech.vrv.coreapi.bean.core.VerifyCodeBean;
+import com.kuyuntech.vrv.coreapi.service.core.VerifyCodeService;
+import com.wbspool.fastboot.core.common.bean.PagerBean;
+import com.wbspool.fastboot.core.common.bean.ResponseBean;
+import com.wbspool.fastboot.core.common.builder.MapBuilder;
+import com.wbspool.fastboot.core.common.constant.ValidGroup;
+import com.wbspool.fastboot.core.web.annotation.ParamErrorAutoResponse;
+import com.wbspool.fastboot.core.web.result.ParamErrorResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.Errors;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+
+
+
+/**
+* VerifyCodeController
+*
+*/
+@RestController
+public class VerifyCodeController {
+
+    private static final Logger logger = LoggerFactory.getLogger(VerifyCodeController.class);
+
+    @Autowired
+    VerifyCodeService verifyCodeService;
+
+    
+
+    /**
+    * 新增
+    * TODO 待实现
+    * @param verifyCodeBean 新增参数
+    * @return
+    *
+    */
+    @RequestMapping
+    @ParamErrorAutoResponse
+    public Object add(@Validated(ValidGroup.Add.class) VerifyCodeBean verifyCodeBean){
+
+         verifyCodeBean = this.verifyCodeService.add(verifyCodeBean);
+
+
+         if (verifyCodeBean == null) {
+               return ResponseBean.serverError("操作失败!");
+         }
+
+          return ResponseBean.success("操作成功!").addData("code", verifyCodeBean.getCode());
+
+    }
+
+    /**
+    * 更新
+    * TODO 待实现
+    * @param verifyCodeBean 更新参数
+    * @return
+    */
+    @RequestMapping
+    @ParamErrorAutoResponse
+    public Object update(@Validated(ValidGroup.Update.class) VerifyCodeBean verifyCodeBean){
+
+       verifyCodeBean = this.verifyCodeService.update(verifyCodeBean);
+
+
+       if (verifyCodeBean == null) {
+           return ResponseBean.serverError("操作失败!");
+       }
+
+       return ResponseBean.success("操作成功!").addData("code", verifyCodeBean.getCode());
+
+    }
+
+
+    /**
+    * 删除
+    * TODO 待实现
+    * @param verifyCodeBean 删除参数
+    * @return
+    */
+    @RequestMapping
+    @ParamErrorAutoResponse
+    public Object delete(@Validated(ValidGroup.Delete.class) VerifyCodeBean verifyCodeBean){
+
+         verifyCodeBean = this.verifyCodeService.delete(verifyCodeBean);
+
+          if (verifyCodeBean == null) {
+             return ResponseBean.serverError("操作失败!");
+          }
+
+          return ResponseBean.success("操作成功!");
+
+    }
+
+
+    /**
+    * 查询列表
+    * TODO 待实现
+    * @param verifyCodeBean 查询参数
+    * @return
+    */
+    @RequestMapping
+    public Object list(VerifyCodeBean verifyCodeBean, PagerBean pagerBean){
+
+        PagerBean<VerifyCodeBean> verifyCodeBeanPagerBean = this.verifyCodeService.findPager(verifyCodeBean,pagerBean);
+
+        List<Map> verifyCodeMapList = new ArrayList<>();
+
+        verifyCodeBeanPagerBean.getItems().forEach((e) ->{
+             Map verifyCodeMap = MapBuilder.newBuilder()
+                                            .put("type",e.getType())
+                                            .put("verifyCode",e.getVerifyCode())
+                                            .put("expireTime",e.getExpireTime())
+                                            .put("verified",e.getVerified())
+                                            .put("code",e.getCode())
+                                            .put("createTime",e.getCreateTime())
+                                            .put("updateTime",e.getUpdateTime())
+                                            .build();
+                    verifyCodeMapList.add(verifyCodeMap);
+             });
+
+
+                return ResponseBean.success("操作成功!").addData("verifyCodes",verifyCodeMapList).addData("pager",verifyCodeBeanPagerBean.simplePager());
+
+    }
+
+
+
+    /**
+    * 查询详情
+    * TODO 待实现
+    * @param verifyCodeBean 查询参数
+    * @return
+    */
+    @RequestMapping
+    @ParamErrorAutoResponse
+    public Object detail(@Validated(ValidGroup.Detail.class) VerifyCodeBean verifyCodeBean,Errors errors){
+
+           verifyCodeBean = this.verifyCodeService.find(verifyCodeBean);
+
+                if(verifyCodeBean == null){
+                    return  ResponseBean.serverError("该记录不存在!");
+                }
+
+                Map verifyCodeMap = MapBuilder.newBuilder()
+                        .put("type",verifyCodeBean.getType())
+                        .put("verifyCode",verifyCodeBean.getVerifyCode())
+                        .put("expireTime",verifyCodeBean.getExpireTime())
+                        .put("verified",verifyCodeBean.getVerified())
+                        .put("code",verifyCodeBean.getCode())
+                        .put("createTime",verifyCodeBean.getCreateTime())
+                        .put("updateTime",verifyCodeBean.getUpdateTime())
+                        .build();
+
+        return ResponseBean.success("操作成功!").addData("verifyCode",verifyCodeMap);
+
+    }
+
+    /**
+    * 批量删除
+    * @param codes 删除唯一标识集合
+    * @return
+    */
+    @RequestMapping
+    public Object batchDelete(List<String> codes){
+
+        if(codes.isEmpty()){
+            return ParamErrorResultBuilder.newBuilder().message("未选择任何删除记录!").paramError("codes","不能为空!").build();
+        }
+
+        try{
+            this.verifyCodeService.batchDeleteByCodes(codes);
+        }catch (Exception e){
+            return  ResponseBean.serverError("操作失败!");
+        }
+
+
+        return ResponseBean.success("操作成功!");
+    }
+
+    
+
+}

+ 1 - 0
sources/server/vrv/vrv-platform/src/main/resources/application.properties

@@ -8,6 +8,7 @@ mybatis.configuration.map-underscore-to-camel-case=true
 spring.pid.file=./run/application.pid
 fastboot.auto-mapping-packages=com.wbspool,com.kuyuntech
 spring.resources.static-locations=classpath:/static/
+server.port=8088
 #dubbo相关配置信息
 #fastboot.dubbo.config.type=file
 #fastboot.dubbo.enable=true

+ 17 - 23
sources/server/vrv/vrv-platform/src/main/resources/static/project.html

@@ -54,7 +54,6 @@
                     <el-button @click="cancel()">取 消</el-button>
                     <el-button type="primary" @click="addOrEditMehtond()">确 定</el-button>
                 </div>
-
             </el-dialog>
 
         </el-form>
@@ -152,23 +151,18 @@
 
             loadData(index) {
                 var vm = this;
-                axios.get('http://localhost:8080/project/list', {
+                axios.get('http://localhost:8088/project/list', {
                     params: {
-                        code: this.code,
-                        valid: this.valid,
-                        name: this.name,
-                        province: this.province,
-                        city: this.city,
-                        pageSize: 2,
+                        pageSize: 3,
                         pageIndex: index ? index : 1,
                         name: this.searchFormData.name,
                         province: this.searchFormData.province,
                         city: this.searchFormData.city,
                     }
                 })
-                    .then(function (response) {
+                    .then((response) => {
                         // vm.paper = response.data.data.paper;
-                        console.log(response.data.data);
+                        //console.log(response.data.data);
 
                         vm.pager = response.data.data.pager
 
@@ -176,7 +170,7 @@
                     })
             },
             search(searchFormData) {
-                console.log(this.searchFormData)
+                //console.log(this.searchFormData)
                 this.loadData();
             },
             showAdd() {
@@ -204,7 +198,7 @@
 
             addOrEditMehtond() {
                 if (this.addOrEdit == 2) {
-                    axios.get('http://localhost:8080/project/update', {
+                    axios.get('http://localhost:8088/project/update', {
                         params: {
                             code: this.formData.code,
                             name: this.formData.name,
@@ -236,7 +230,7 @@
                 }
 
                 if (this.addOrEdit == 1) {
-                    axios.get('http://localhost:8080/project/add', {
+                    axios.get('http://localhost:8088/project/add', {
                         params: {
                             name: this.formData.name,
                             province: this.formData.province,
@@ -246,21 +240,18 @@
                         }
                     })
                         .then((response) => {
-                            console.log(response)
-
                             if (response.data.status == 200) {
+
+                                this.dialogFormVisible = false;
+
                                 this.$message({
                                     type: 'success',
                                     showClose: true,
                                     message: response.data.desc
                                 })
+
                                 this.loadData();
                             }
-
-                            this.dialogFormVisible = false;
-
-                            this.loadData();
-
                         })
                 }
             },
@@ -269,7 +260,7 @@
                 this.$confirm('确认删除', '提示', {
                     type: 'warning'
                 }).then(() => {
-                    axios.get('http://localhost:8080/project/delete', {
+                    axios.get('http://localhost:8088/project/delete', {
                         params: {
                             code: row.code,
                         }
@@ -296,7 +287,11 @@
                     });
             },
             cancel() {
-                this.$message('操作取消');
+                this.$message({
+                    message: '操作取消',
+                    showClose: true,
+                    type: 'info'
+                });
 
                 this.dialogFormVisible = false;
 
@@ -305,7 +300,6 @@
 
     })
 
-
 </script>
 </body>
 </html>

+ 298 - 0
sources/server/vrv/vrv-platform/src/main/resources/static/user.html

@@ -0,0 +1,298 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+
+    <!-- 引入样式 -->
+    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
+
+    <title>用户管理</title>
+</head>
+<body>
+<div id="project">
+    <el-main>
+        <el-form :inline="true" :model="searchFormData">
+            <el-form-item label="用户名称">
+                <el-input placeholder="用户名称" size="small" v-model="searchFormData.realname"></el-input>
+            </el-form-item>
+            <el-form-item label="账号">
+                <el-input placeholder="账号" size="small" v-model="searchFormData.account"></el-input>
+            </el-form-item>
+            <el-form-item label="密码">
+                <el-input placeholder="密码" size="small" v-model="searchFormData.password"></el-input>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button type="primary" size="small" @click="search(searchFormData)">搜索</el-button>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button type="primary" size="small" @click="showAdd">新增</el-button>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button type="primary" size="small" @click="showBindRole">绑定角色</el-button>
+            </el-form-item>
+
+
+            <el-dialog title="用户" :visible.sync="dialogFormVisible">
+                <el-form label-position="left" :model="formData">
+                    <el-form-item label="用户名称">
+                        <el-input v-model="formData.realname"></el-input>
+                    </el-form-item>
+                    <el-form-item label="账号">
+                        <el-input v-model="formData.account"></el-input>
+                    </el-form-item>
+                    <el-form-item label="密码">
+                        <el-input v-model="formData.password"></el-input>
+                    </el-form-item>
+                </el-form>
+
+                <div slot="footer" class="dialog-footer">
+                    <el-button @click="cancel()">取 消</el-button>
+                    <el-button type="primary" @click="addOrEditMehtond()">确 定</el-button>
+                </div>
+            </el-dialog>
+
+        </el-form>
+
+
+        <el-table :data="tableData">
+
+            <el-table-column prop="realname" label="用户名称"></el-table-column>
+            <el-table-column prop="account" label="账号"></el-table-column>
+            <el-table-column prop="password" label="密码"></el-table-column>
+
+
+            <el-table-column label="操作">
+                <template slot-scope="scope">
+                    <el-button type="primary" size="small" @click="showEdit(scope.row)">修改</el-button>
+                    <el-button type="danger" size="small" @click="del(scope.row)">删除</el-button>
+                </template>
+            </el-table-column>
+
+        </el-table>
+
+        <el-pagination
+                background
+                layout="prev, pager, next"
+                :page-size="pager.pageSize"
+                :current-page="pager.pageIndex"
+                :total="pager.itemCount"
+                @current-change="handleCurrentChange"
+        >
+        </el-pagination>
+
+    </el-main>
+</div>
+
+
+<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
+<!-- 引入组件库 -->
+<script src="https://unpkg.com/element-ui/lib/index.js"></script>
+<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
+
+<script>
+    new Vue({
+        el: '#project',
+        data() {
+            return {
+
+                addOrEdit: 1,
+
+                dialogFormVisible: false,
+
+                pager: {
+                    pageSize: 2,
+                    pageIndex: 1,
+                    itemCount: 0,
+                },
+
+                tableData:
+                    [{
+                        realname: '',
+                        account: '',
+                        password: '',
+                        code: '',
+                        valid: '',
+                    }],
+                formData: {
+                    realname: '',
+                    account: '',
+                    password: '',
+                    code: '',
+                    valid: '',
+                },
+                searchFormData:
+                    {
+                        realname: '',
+                        account: '',
+                        password: '',
+                    }
+            }
+        },
+
+        created: function () {
+            this.loadData();
+        },
+
+        methods: {
+            //切换页码
+            handleCurrentChange(index) {
+                this.loadData(index)
+            },
+
+            loadData(index) {
+                var vm = this;
+                axios.get('http://localhost:8088/user/list', {
+                    params: {
+                        pageSize: 3,
+                        pageIndex: index ? index : 1,
+                        realname: this.searchFormData.realname,
+                        account: this.searchFormData.account,
+                        password: this.searchFormData.password,
+                    }
+                })
+                    .then((response) => {
+                        // vm.paper = response.data.data.paper;
+                        //console.log(response.data.data);
+
+                        vm.pager = response.data.data.pager
+
+                        vm.tableData = response.data.data.users;
+                    })
+            },
+            search(searchFormData) {
+                //console.log(this.searchFormData)
+                this.loadData();
+            },
+            showAdd() {
+                this.dialogFormVisible = true;
+
+                this.formData.realname = '';
+                this.formData.account = '';
+                this.formData.password = '';
+
+                this.addOrEdit = 1
+            },
+
+            showEdit(row) {
+
+                console.log(row)
+
+                this.dialogFormVisible = true;
+
+                this.formData = row
+
+                this.addOrEdit = 2
+            },
+
+
+            addOrEditMehtond() {
+                if (this.addOrEdit == 2) {
+                    axios.get('http://localhost:8088/user/update', {
+                        params: {
+                            code: this.formData.code,
+                            realname: this.formData.realname,
+                            account: this.formData.account,
+                            password: this.formData.password
+                        }
+                    })
+                        .then((response) => {
+                            console.log(response)
+
+                            if (response.data.status == 200) {
+
+                                this.$message({
+                                    type: 'success',
+                                    showClose: true,
+                                    message: response.data.desc
+                                })
+                            }
+
+                            this.dialogFormVisible = false;
+
+                            this.loadData();
+
+                        })
+                        .catch(() => {
+                        });
+                }
+
+                if (this.addOrEdit == 1) {
+                    axios.get('http://localhost:8088/user/add', {
+                        params: {
+                            realname: this.formData.realname,
+                            account: this.formData.account,
+                            password: this.formData.password
+                        }
+                    })
+                        .then((response) => {
+                            if (response.data.status == 200) {
+
+                                this.dialogFormVisible = false;
+
+                                this.$message({
+                                    type: 'success',
+                                    showClose: true,
+                                    message: response.data.desc
+                                })
+
+                                this.loadData();
+                            }
+                        })
+                }
+            },
+
+            del(row) {
+                this.$confirm('确认删除', '提示', {
+                    type: 'warning'
+                }).then(() => {
+                    axios.get('http://localhost:8088/user/delete', {
+                        params: {
+                            code: row.code,
+                        }
+                    })
+                        .then((response) => {
+                            console.log(response)
+                            if (response.data.status == 200) {
+                                this.$message({
+                                    type: 'success',
+                                    showClose: true,
+                                    message: response.data.desc
+                                })
+
+                            }
+                            this.loadData();
+                        })
+                })
+                    .catch(() => {
+                        this.$message({
+                            type: 'info',
+                            showClose: true,
+                            message: '取消删除'
+                        })
+                    });
+            },
+            cancel() {
+                this.$message({
+                    message: '操作取消',
+                    showClose: true,
+                    type: 'info'
+                });
+
+                this.dialogFormVisible = false;
+
+            },
+
+            showBindRole(){
+
+            }
+        }
+
+    })
+
+
+</script>
+</body>
+</html>