浏览代码

manager后台登录

yinhao 4 年之前
父节点
当前提交
1647941169
共有 36 个文件被更改,包括 1465 次插入2 次删除
  1. 55 0
      huimv-mobile-video/huimv-manager/pom.xml
  2. 5 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/HuimvMobileManagerApplication.java
  3. 35 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/config/InterceptorConfig.java
  4. 39 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/config/Knife4jConfiguration.java
  5. 29 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/enums/AbstractBaseExceptionEnum.java
  6. 32 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/enums/AdminTypeEnum.java
  7. 86 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/enums/AuthExceptionEnum.java
  8. 33 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/enums/CommonStatusEnum.java
  9. 37 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/exception/AuthException.java
  10. 61 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/exception/RRException.java
  11. 69 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/exception/RRExceptionHandler.java
  12. 80 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/interceptor/JWTInterceptor.java
  13. 29 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/controller/CaptchaController.java
  14. 33 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/controller/MobileUserLoginController.java
  15. 49 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/MobileApi.java
  16. 42 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/MobileAttention.java
  17. 33 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/MobileMemorandum.java
  18. 29 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/MobileRemember.java
  19. 42 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/MobileUnit.java
  20. 77 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/MobileUser.java
  21. 17 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/param/LoginParam.java
  22. 9 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/repository/MobileApiRepository.java
  23. 9 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/repository/MobileAttentionRepository.java
  24. 9 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/repository/MobileMemorandumRepository.java
  25. 9 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/repository/MobileRememberRepository.java
  26. 9 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/repository/MobileUnitRepository.java
  27. 11 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/repository/MobileUserRepository.java
  28. 27 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/service/MobileUserService.java
  29. 66 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/service/impl/MobileUserServiceImpl.java
  30. 63 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/result/R.java
  31. 28 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/result/Result.java
  32. 15 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/result/ResultStatus.java
  33. 53 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/util/IpUtil.java
  34. 148 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/util/JwtUtils.java
  35. 85 0
      huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/util/PropertiesUtils.java
  36. 12 2
      huimv-mobile-video/huimv-manager/src/main/resources/application-dev.yml

+ 55 - 0
huimv-mobile-video/huimv-manager/pom.xml

@@ -11,5 +11,60 @@
 
 	<artifactId>huimv-manager</artifactId>
 
+	<dependencies>
+
+		<!--验证码-->
+		<dependency>
+			<groupId>cn.dustlight.captcha</groupId>
+			<artifactId>captcha-core</artifactId>
+			<version>0.0.6</version>
+		</dependency>
+		<dependency>
+			<groupId>cn.dustlight.captcha</groupId>
+			<artifactId>redis-store</artifactId>
+			<version>0.0.6</version>
+		</dependency>
+
+		<!--jwt-->
+		<dependency>
+			<groupId>io.jsonwebtoken</groupId>
+			<artifactId>jjwt</artifactId>
+			<version>0.9.1</version>
+		</dependency>
+
+		<!--hutool-->
+		<dependency>
+			<groupId>cn.hutool</groupId>
+			<artifactId>hutool-all</artifactId>
+			<version>5.5.9</version>
+		</dependency>
+
+		<!--knife4j-->
+		<dependency>
+			<groupId>com.github.xiaoymin</groupId>
+			<artifactId>knife4j-spring-boot-starter</artifactId>
+			<version>2.0.7</version>
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger-ui</artifactId>
+			<version>2.10.5</version>
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger2</artifactId>
+			<version>2.10.5</version>
+		</dependency>
+
+
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpcore</artifactId>
+			<version>4.4.12</version>
+		</dependency>
+
+
+	</dependencies>
+
 
 </project>

+ 5 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/HuimvMobileManagerApplication.java

@@ -1,8 +1,13 @@
 package com.huimv.manager;
 
+import cn.dustlight.captcha.annotations.EnableCaptcha;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
+/**
+ * @author huimv
+ */
+@EnableCaptcha
 @SpringBootApplication
 public class HuimvMobileManagerApplication {
 

+ 35 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/config/InterceptorConfig.java

@@ -0,0 +1,35 @@
+package com.huimv.manager.config;
+
+import com.huimv.manager.interceptor.JWTInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @Description: 注册验证tocken的拦截器
+ * @Author
+ * @Date 2021/4/19 20:41
+ * @Version V1.0
+ */
+@Configuration
+public class InterceptorConfig implements WebMvcConfigurer {
+    @Bean
+    public JWTInterceptor jwtInterceptor(){
+        return new JWTInterceptor();
+    }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(jwtInterceptor()).
+                excludePathPatterns("/login").
+                excludePathPatterns("logout").
+                excludePathPatterns("/captcha/send").
+                excludePathPatterns("/swagger-resources/**").
+                excludePathPatterns("/").
+                excludePathPatterns("/*.ico").
+                excludePathPatterns("/js/**").
+                excludePathPatterns("/img/**").
+                addPathPatterns("/**");
+    }
+}

+ 39 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/config/Knife4jConfiguration.java

@@ -0,0 +1,39 @@
+package com.huimv.manager.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
+
+/**
+ * @author yinhao
+ * @since 2021/4/19 18:00
+ */
+@Configuration
+@EnableSwagger2WebMvc
+public class Knife4jConfiguration {
+
+    @Bean(value = "defaultApi2")
+    public Docket defaultApi2() {
+        Docket docket = new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(new ApiInfoBuilder()
+                        //.title("swagger-bootstrap-ui-demo RESTful APIs")
+                        .description("# swagger-bootstrap-ui-demo RESTful APIs")
+                        .termsOfServiceUrl("http://www.huimv.com/")
+                        .contact("xx@qq.com")
+                        .version("1.0")
+                        .build())
+                //分组名称
+                .groupName("2.X版本")
+                .select()
+                //这里指定Controller扫描包路径
+                .apis(RequestHandlerSelectors.basePackage("com.huimv.manager"))
+                .paths(PathSelectors.any())
+                .build();
+        return docket;
+    }
+}

+ 29 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/enums/AbstractBaseExceptionEnum.java

@@ -0,0 +1,29 @@
+package com.huimv.manager.enums;
+
+/**
+ * 异常枚举格式规范
+ *
+ * @author yubaoshan
+ * @date 2017/12/17 22:22
+ */
+public interface AbstractBaseExceptionEnum {
+
+    /**
+     * 获取异常的状态码
+     *
+     * @return 状态码
+     * @author yubaoshan
+     * @date 2020/7/9 14:28
+     */
+    Integer getCode();
+
+    /**
+     * 获取异常的提示信息
+     *
+     * @return 提示信息
+     * @author yubaoshan
+     * @date 2020/7/9 14:28
+     */
+    String getMessage();
+
+}

+ 32 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/enums/AdminTypeEnum.java

@@ -0,0 +1,32 @@
+package com.huimv.manager.enums;
+
+import lombok.Getter;
+
+/**
+ * 管理员类型枚举
+ *
+ * @author xuyuxiang
+ * @date 2020/4/5 10:23
+ */
+@Getter
+public enum AdminTypeEnum {
+
+    /**
+     * 超级管理员
+     */
+    ADMIN(1, "管理员"),
+
+    /**
+     * 非管理员
+     */
+    NONE(2, "非管理员");
+
+    private final Integer code;
+
+    private final String message;
+
+    AdminTypeEnum(int code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+}

+ 86 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/enums/AuthExceptionEnum.java

@@ -0,0 +1,86 @@
+package com.huimv.manager.enums;
+
+
+/**
+ * 认证相关的异常的枚举
+ * <p>
+ * 认证和鉴权的区别:
+ * <p>
+ * 认证可以证明你能登录系统,认证的过程是校验token的过程
+ * 鉴权可以证明你有系统的哪些权限,鉴权的过程是校验角色是否包含某些接口的权限
+ *
+ * @author yubaoshan
+ * @date 2019/7/18 22:22
+ */
+public enum AuthExceptionEnum implements AbstractBaseExceptionEnum {
+
+    /**
+     * 账号或密码为空
+     */
+    ACCOUNT_PWD_EMPTY(1, "账号或密码为空,请检查account或password参数"),
+
+    /**
+     * 账号密码错误
+     */
+    ACCOUNT_PWD_ERROR(2, "账号或密码错误,请检查account或password参数"),
+
+    /**
+     * 验证码错误
+     */
+    VALID_CODE_ERROR(3, "验证码错误,请检查captcha参数"),
+
+    /**
+     * 请求token为空
+     */
+    REQUEST_TOKEN_EMPTY(4, "请求token为空,请携带token访问本接口"),
+
+    /**
+     * token格式不正确,token请以Bearer开头
+     */
+    NOT_VALID_TOKEN_TYPE(5, "token格式不正确,token请以Bearer开头,并且Bearer后边带一个空格"),
+
+    /**
+     * 请求token错误
+     */
+    REQUEST_TOKEN_ERROR(6, "请求token错误"),
+
+    /**
+     * 账号被冻结
+     */
+    ACCOUNT_FREEZE_ERROR(7, "账号被冻结,请联系管理员"),
+
+    /**
+     * 登录已过期
+     */
+    LOGIN_EXPIRED(8, "登录已过期,请重新登录"),
+
+    /**
+     * 无登录用户
+     */
+    NO_LOGIN_USER(9, "无登录用户"),
+
+    /**
+     * 验证码错误
+     */
+    CONSTANT_EMPTY_ERROR(10, "验证码错误");
+
+    private final Integer code;
+
+    private final String message;
+
+    AuthExceptionEnum(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    @Override
+    public Integer getCode() {
+        return code;
+    }
+
+    @Override
+    public String getMessage() {
+        return message;
+    }
+
+}

+ 33 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/enums/CommonStatusEnum.java

@@ -0,0 +1,33 @@
+package com.huimv.manager.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum CommonStatusEnum {
+
+    /**
+     * 正常
+     */
+    ENABLE(0, "正常"),
+
+    /**
+     * 停用
+     */
+    DISABLE(1, "停用"),
+
+    /**
+     * 删除
+     */
+    DELETED(2, "删除");
+
+    private final Integer code;
+
+    private final String message;
+
+    CommonStatusEnum(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+
+}

+ 37 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/exception/AuthException.java

@@ -0,0 +1,37 @@
+package com.huimv.manager.exception;
+
+
+import com.huimv.manager.enums.AbstractBaseExceptionEnum;
+
+/**
+ * 认证相关的异常
+ * <p>
+ * 认证和鉴权的区别:
+ * <p>
+ * 认证可以证明你能登录系统,认证的过程是校验token的过程
+ * 鉴权可以证明你有系统的哪些权限,鉴权的过程是校验角色是否包含某些接口的权限
+ *
+ * @author yinhao
+ * @date 2020/3/12 9:55
+ */
+public class AuthException extends RuntimeException {
+
+    private final Integer code;
+
+    private final String errorMessage;
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getErrorMessage() {
+        return errorMessage;
+    }
+
+    public AuthException(AbstractBaseExceptionEnum exception) {
+        super(exception.getMessage());
+        this.code = exception.getCode();
+        this.errorMessage = exception.getMessage();
+    }
+
+}

+ 61 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/exception/RRException.java

@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2016-2019 人人开源 All rights reserved.
+ *
+ * https://www.renren.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.huimv.manager.exception;
+
+/**
+ * 自定义异常
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public class RRException extends RuntimeException {
+	private static final long serialVersionUID = 1L;
+	
+    private String msg;
+    private int code = 500;
+    
+    public RRException(String msg) {
+		super(msg);
+		this.msg = msg;
+	}
+	
+	public RRException(String msg, Throwable e) {
+		super(msg, e);
+		this.msg = msg;
+	}
+	
+	public RRException(String msg, int code) {
+		super(msg);
+		this.msg = msg;
+		this.code = code;
+	}
+	
+	public RRException(String msg, int code, Throwable e) {
+		super(msg, e);
+		this.msg = msg;
+		this.code = code;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	public int getCode() {
+		return code;
+	}
+
+	public void setCode(int code) {
+		this.code = code;
+	}
+	
+	
+}

+ 69 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/exception/RRExceptionHandler.java

@@ -0,0 +1,69 @@
+package com.huimv.manager.exception;
+
+import cn.dustlight.captcha.store.CodeNotExistsException;
+import com.huimv.manager.enums.AuthExceptionEnum;
+import com.huimv.manager.result.R;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.servlet.NoHandlerFoundException;
+
+/**
+ * 异常处理器
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@RestControllerAdvice
+public class RRExceptionHandler {
+	private Logger logger = LoggerFactory.getLogger(getClass());
+
+	/**
+	 * 处理自定义异常
+	 */
+	@ExceptionHandler(RRException.class)
+	public R handleRRException(RRException e){
+		R r = new R();
+		r.put("code", e.getCode());
+		r.put("msg", e.getMessage());
+
+		return r;
+	}
+
+	@ExceptionHandler(NoHandlerFoundException.class)
+	public R handlerNoFoundException(Exception e) {
+		logger.error(e.getMessage(), e);
+		return R.error(404, "路径不存在,请检查路径是否正确");
+	}
+
+	@ExceptionHandler(DuplicateKeyException.class)
+	public R handleDuplicateKeyException(DuplicateKeyException e){
+		logger.error(e.getMessage(), e);
+		return R.error("数据库中已存在该记录");
+	}
+
+//	@ExceptionHandler(AuthorizationException.class)
+//	public R handleAuthorizationException(AuthorizationException e){
+//		logger.error(e.getMessage(), e);
+//		return R.error("没有权限,请联系管理员授权");
+//	}
+
+	@ExceptionHandler(CodeNotExistsException.class)
+	public R handCodeNotExistsException(CodeNotExistsException e){
+		logger.error(e.getMessage(),e);
+		return R.error(AuthExceptionEnum.CONSTANT_EMPTY_ERROR.getMessage());
+	}
+
+	@ExceptionHandler(AuthException.class)
+	public R handAuthException(AuthException e){
+		logger.error(e.getMessage(), e);
+		return R.error(e.getCode(),e.getErrorMessage());
+	}
+
+	@ExceptionHandler(Exception.class)
+	public R handleException(Exception e){
+		logger.error(e.getMessage(), e);
+		return R.error();
+	}
+}

+ 80 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/interceptor/JWTInterceptor.java

@@ -0,0 +1,80 @@
+package com.huimv.manager.interceptor;
+
+import com.huimv.manager.modular.entity.MobileUser;
+import com.huimv.manager.modular.service.MobileUserService;
+import com.huimv.manager.result.R;
+import com.huimv.manager.util.JwtUtils;
+import io.jsonwebtoken.Claims;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *  jwt拦截器
+ * </p>
+ * @author yinhao
+ * @since 2021/4/19
+ */
+
+public class JWTInterceptor implements HandlerInterceptor {
+
+    @Autowired
+    private MobileUserService mobileUserService;
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        // 如果不是映射到方法,则直接通过
+        if (!(handler instanceof HandlerMethod)) {
+            return true;
+        }
+
+        // 获取token
+        String token = request.getHeader("token");
+        if (StringUtils.isEmpty(token)) {
+            response.sendError(403,"无token,请先登录!");
+            return false;
+        }
+
+        Claims claims = JwtUtils.getClaims(token);
+        Integer id = claims.get("id", Integer.class);
+        if (mobileUserService == null) {
+            response.sendError(500,"服务器发送错误!");
+            return false;
+        }
+
+        MobileUser mobileUser = mobileUserService.findById(id);
+        if (mobileUser == null) {
+            response.sendError(401,"用户不存在,请先注册!");
+            return false;
+        }
+
+        int result = JwtUtils.verifyToken(claims);
+        if (result >= 1) {
+            response.sendError(40101,"token已失效或被篡改,请重新登录!");
+            return false;
+        }
+        if (result == -1) {
+            String jwtToken = JwtUtils.getJwtToken(id);
+            request.setAttribute("token",jwtToken);
+            return true;
+        }
+        return true;
+    }
+
+
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+
+    }
+}

+ 29 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/controller/CaptchaController.java

@@ -0,0 +1,29 @@
+package com.huimv.manager.modular.controller;
+
+import cn.dustlight.captcha.annotations.CodeValue;
+import cn.dustlight.captcha.annotations.SendCode;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 验证码前端控制器
+ * </p>
+ * @Author yinhao
+ * @Date 2021/4/19 11:56
+ */
+@RestController
+@CrossOrigin
+@RequestMapping("/captcha")
+@Slf4j
+public class CaptchaController {
+
+    @GetMapping("/send")
+    @SendCode()
+    public void getCaptcha(@CodeValue String code){
+        log.info(code);
+    }
+}

+ 33 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/controller/MobileUserLoginController.java

@@ -0,0 +1,33 @@
+package com.huimv.manager.modular.controller;
+
+import cn.dustlight.captcha.annotations.CodeValue;
+import cn.dustlight.captcha.annotations.VerifyCode;
+import com.huimv.manager.modular.entity.param.LoginParam;
+import com.huimv.manager.modular.service.MobileUserService;
+import com.huimv.manager.result.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author yinhao
+ * @Date 2021/4/19 12:18
+ * @Description
+ */
+@Slf4j
+@CrossOrigin
+@RestController
+public class MobileUserLoginController {
+
+    @Autowired
+    private MobileUserService mobileUserService;
+
+    @PostMapping("/login")
+    @VerifyCode
+    public R login(LoginParam loginParam,@CodeValue String code) {
+        log.info(code);
+        return mobileUserService.login(loginParam,code);
+    }
+}

+ 49 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/MobileApi.java

@@ -0,0 +1,49 @@
+package com.huimv.manager.modular.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Data
+@Entity
+@Table(name = "mobile_api")
+public class MobileApi implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @Column(name = "id", nullable = false)
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 牧场名称
+     */
+    @ApiModelProperty("牧场名称")
+    @Column(name = "farm_name")
+    private String farmName;
+
+    /**
+     * 牧场id
+     */
+    @Column(name = "farm_id")
+    @ApiModelProperty("牧场id")
+    private Integer farmId;
+
+    /**
+     * API接口
+     */
+    @Column(name = "url")
+    @ApiModelProperty("API接口")
+    private String url;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty("备注")
+    @Column(name = "remark")
+    private String remark;
+
+}

+ 42 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/MobileAttention.java

@@ -0,0 +1,42 @@
+package com.huimv.manager.modular.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Data
+@Entity
+@Table(name = "mobile_attention")
+public class MobileAttention implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @Column(name = "id", nullable = false)
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "user_id")
+    @ApiModelProperty("用户id")
+    private Integer userId;
+
+    /**
+     * 显示区域
+     */
+    @Column(name = "area_id")
+    @ApiModelProperty("显示区域")
+    private Integer areaId;
+
+    /**
+     * 单位id
+     */
+    @Column(name = "unit_id")
+    @ApiModelProperty("单位id")
+    private Integer unitId;
+
+}

+ 33 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/MobileMemorandum.java

@@ -0,0 +1,33 @@
+package com.huimv.manager.modular.entity;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@Entity
+@Table(name = "mobile_memorandum")
+public class MobileMemorandum implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @Column(name = "id", nullable = false)
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    @Column(name = "user_id")
+    private Integer userId;
+
+    @Column(name = "content")
+    private String content;
+
+    @Column(name = "title")
+    private String title;
+
+    @Column(name = "date")
+    private Date date;
+
+}

+ 29 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/MobileRemember.java

@@ -0,0 +1,29 @@
+package com.huimv.manager.modular.entity;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Data
+@Entity
+@Table(name = "mobile_remember")
+public class MobileRemember implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @Column(name = "id", nullable = false)
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    @Column(name = "user_id")
+    private Integer userId;
+
+    @Column(name = "issue")
+    private String issue;
+
+    @Column(name = "answer")
+    private String answer;
+
+}

+ 42 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/MobileUnit.java

@@ -0,0 +1,42 @@
+package com.huimv.manager.modular.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Data
+@Entity
+@Table(name = "mobile_unit")
+public class MobileUnit implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @Column(name = "id", nullable = false)
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 单位全称
+     */
+    @ApiModelProperty("单位全称")
+    @Column(name = "full_name")
+    private String fullName;
+
+    /**
+     * 单位简称
+     */
+    @ApiModelProperty("单位简称")
+    @Column(name = "short_name")
+    private String shortName;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty("备注")
+    @Column(name = "remark")
+    private String remark;
+
+}

+ 77 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/MobileUser.java

@@ -0,0 +1,77 @@
+package com.huimv.manager.modular.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Data
+@Entity
+@Table(name = "mobile_user")
+public class MobileUser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @Column(name = "id", nullable = false)
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 姓名
+     */
+    @ApiModelProperty("姓名")
+    @Column(name = "user_name")
+    private String userName;
+
+    /**
+     * 密码
+     */
+    @ApiModelProperty("密码")
+    @Column(name = "password")
+    private String password;
+
+    /**
+     * 账号
+     */
+    @ApiModelProperty("账号")
+    @Column(name = "account")
+    private String account;
+
+    /**
+     * 账号状态
+     */
+    @Column(name = "status")
+    @ApiModelProperty("账号状态")
+    private Integer status;
+
+    /**
+     * 所属单位
+     */
+    @Column(name = "unit")
+    @ApiModelProperty("所属单位")
+    private String unit;
+
+    /**
+     * 所属单位id
+     */
+    @Column(name = "unit_id")
+    @ApiModelProperty("所属单位id")
+    private Integer unitId;
+
+    /**
+     * 职务
+     */
+    @Column(name = "job")
+    @ApiModelProperty("职务")
+    private String job;
+
+    /**
+     * 权限级别
+     */
+    @ApiModelProperty("权限级别")
+    @Column(name = "grant_class")
+    private Integer grantClass;
+
+}

+ 17 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/entity/param/LoginParam.java

@@ -0,0 +1,17 @@
+package com.huimv.manager.modular.entity.param;
+
+import lombok.Data;
+
+/**
+ * @Author yinhao
+ * @Date 2021/4/19 18:16
+ * @Description
+ */
+@Data
+public class LoginParam {
+
+    private String account;
+
+    private String password;
+
+}

+ 9 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/repository/MobileApiRepository.java

@@ -0,0 +1,9 @@
+package com.huimv.manager.modular.repository;
+
+import com.huimv.manager.modular.entity.MobileApi;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MobileApiRepository extends JpaRepository<MobileApi, Integer>, JpaSpecificationExecutor<MobileApi> {
+
+}

+ 9 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/repository/MobileAttentionRepository.java

@@ -0,0 +1,9 @@
+package com.huimv.manager.modular.repository;
+
+import com.huimv.manager.modular.entity.MobileAttention;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MobileAttentionRepository extends JpaRepository<MobileAttention, Integer>, JpaSpecificationExecutor<MobileAttention> {
+
+}

+ 9 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/repository/MobileMemorandumRepository.java

@@ -0,0 +1,9 @@
+package com.huimv.manager.modular.repository;
+
+import com.huimv.manager.modular.entity.MobileMemorandum;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MobileMemorandumRepository extends JpaRepository<MobileMemorandum, Integer>, JpaSpecificationExecutor<MobileMemorandum> {
+
+}

+ 9 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/repository/MobileRememberRepository.java

@@ -0,0 +1,9 @@
+package com.huimv.manager.modular.repository;
+
+import com.huimv.manager.modular.entity.MobileRemember;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MobileRememberRepository extends JpaRepository<MobileRemember, Integer>, JpaSpecificationExecutor<MobileRemember> {
+
+}

+ 9 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/repository/MobileUnitRepository.java

@@ -0,0 +1,9 @@
+package com.huimv.manager.modular.repository;
+
+import com.huimv.manager.modular.entity.MobileUnit;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MobileUnitRepository extends JpaRepository<MobileUnit, Integer>, JpaSpecificationExecutor<MobileUnit> {
+
+}

+ 11 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/repository/MobileUserRepository.java

@@ -0,0 +1,11 @@
+package com.huimv.manager.modular.repository;
+
+import com.huimv.manager.modular.entity.MobileUser;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MobileUserRepository extends JpaRepository<MobileUser, Integer>, JpaSpecificationExecutor<MobileUser> {
+
+    MobileUser findByAccount(String account);
+
+}

+ 27 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/service/MobileUserService.java

@@ -0,0 +1,27 @@
+package com.huimv.manager.modular.service;
+
+import com.huimv.manager.modular.entity.MobileUser;
+import com.huimv.manager.modular.entity.param.LoginParam;
+import com.huimv.manager.result.R;
+
+/**
+ * @Author yinhao
+ * @Date 2021/4/19 18:10
+ * @Description
+ */
+public interface MobileUserService {
+    /**
+     * 登录
+     * @param loginParam
+     * @param code
+     * @return
+     */
+    R login(LoginParam loginParam, String code);
+
+    /**
+     * 根据id查询用户
+     * @param id
+     * @return
+     */
+    MobileUser findById(Integer id);
+}

+ 66 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/modular/service/impl/MobileUserServiceImpl.java

@@ -0,0 +1,66 @@
+package com.huimv.manager.modular.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.huimv.manager.enums.AdminTypeEnum;
+import com.huimv.manager.enums.AuthExceptionEnum;
+import com.huimv.manager.exception.AuthException;
+import com.huimv.manager.exception.RRException;
+import com.huimv.manager.modular.entity.MobileUser;
+import com.huimv.manager.modular.entity.param.LoginParam;
+import com.huimv.manager.modular.repository.MobileUserRepository;
+import com.huimv.manager.modular.service.MobileUserService;
+import com.huimv.manager.result.R;
+import com.huimv.manager.util.JwtUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.DigestUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.Objects;
+
+/**
+ * @Author yinhao
+ * @Date 2021/4/19 18:11
+ * @Description
+ */
+@Service
+public class MobileUserServiceImpl implements MobileUserService {
+
+    @Autowired
+    private MobileUserRepository mobileUserRepository;
+
+    @Override
+    public R login(LoginParam loginParam, String code) {
+        String account = loginParam.getAccount();
+        String password = loginParam.getPassword();
+        if (StringUtils.isEmpty(code)) {
+            throw new AuthException(AuthExceptionEnum.CONSTANT_EMPTY_ERROR);
+        }
+        if (ObjectUtil.hasEmpty(account,password)) {
+            throw new AuthException(AuthExceptionEnum.ACCOUNT_PWD_EMPTY);
+        }
+
+        MobileUser mobileUser = mobileUserRepository.findByAccount(account);
+        if (mobileUser == null) {
+            throw new AuthException(AuthExceptionEnum.ACCOUNT_PWD_ERROR);
+        }
+
+        if (mobileUser.getGrantClass().equals(AdminTypeEnum.ADMIN.getCode())) {
+            throw new RRException("对不起,你不是管理员,不能登录此系统!",401);
+        }
+
+        String inputPwdMd5 = DigestUtils.md5DigestAsHex(password.getBytes());
+        if (!inputPwdMd5.equals(mobileUser.getPassword())) {
+            throw new AuthException(AuthExceptionEnum.ACCOUNT_PWD_ERROR);
+        }
+
+        String token =  JwtUtils.getJwtToken(mobileUser.getId());
+        mobileUser.setPassword("");
+        return Objects.requireNonNull(R.ok().put("token", token)).put("mobileUser",mobileUser);
+    }
+
+    @Override
+    public MobileUser findById(Integer id) {
+        return mobileUserRepository.findById(id).orElse(null);
+    }
+}

+ 63 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/result/R.java

@@ -0,0 +1,63 @@
+package com.huimv.manager.result;
+
+import org.apache.http.HttpStatus;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 返回数据
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public class R extends HashMap<String, Object> {
+	private static final long serialVersionUID = 1L;
+	
+	public R() {
+		put("code", 0);
+		put("msg", "success");
+	}
+	
+	public static R error() {
+		return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
+	}
+	
+	public static R error(String msg) {
+		return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
+	}
+	
+	public static R error(int code, String msg) {
+		R r = new R();
+		r.put("code", code);
+		r.put("msg", msg);
+		return r;
+	}
+
+	public static R ok(String msg) {
+		R r = new R();
+		r.put("msg", msg);
+		return r;
+	}
+	
+	public static R ok(Map<String, Object> map) {
+		R r = new R();
+		r.putAll(map);
+		return r;
+	}
+	
+	public static R ok() {
+		return new R();
+	}
+
+	@Override
+	public R put(String key, Object value) {
+		super.put(key, value);
+		return this;
+	}
+
+	public static void main(String[] args) {
+		R r = new R();
+		System.out.println(r);
+
+	}
+}

+ 28 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/result/Result.java

@@ -0,0 +1,28 @@
+package com.huimv.manager.result;
+
+import lombok.Data;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.face.result
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2020/12/29 0029 14:46
+ **/
+@Data
+public class Result {
+    private Integer  status;
+    private String msg;
+    private Object data;
+
+    public Result(Integer status, String msg, Object data) {
+        this.status = status;
+        this.msg = msg;
+        this.data = data;
+    }
+
+    public Result(Integer status, String msg) {
+        this.status = status;
+        this.msg = msg;
+    }
+}

+ 15 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/result/ResultStatus.java

@@ -0,0 +1,15 @@
+package com.huimv.manager.result;
+
+public  class ResultStatus {
+	public  final static String addNull = "没有输入参数";
+	public  final static String addSuccess = "添加成功";
+	public  final static String addFailed = "添加失败";
+	public  final static String deleteNull = "没有要删除的数据";
+	public  final static String deleteSuccess = "删除成功";
+	public  final static String deleteFailed = "删除失败";
+	public  final static String updateNull = "没有要修改的数据";
+	public  final static String updateSuccess = "修改成功";
+	public  final static String updateFailed = "修改失败";
+	public  final static String findSuccess = "查询成功";
+	public  final static String findFailed = "查询失败";
+}

+ 53 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/util/IpUtil.java

@@ -0,0 +1,53 @@
+package com.huimv.manager.util;
+
+import javax.servlet.http.HttpServletRequest;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.video.util
+ * @Description : 获取ip地址工具类
+ * @Author : yuxuexuan
+ * @Create : 2021/3/4 0006 14:28
+ **/
+public class IpUtil {
+    public static String getIpAddr(HttpServletRequest request) {
+        String ipAddress = null;
+        try {
+            ipAddress = request.getHeader("x-forwarded-for");
+            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
+                ipAddress = request.getHeader("Proxy-Client-IP");
+            }
+            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
+                ipAddress = request.getHeader("WL-Proxy-Client-IP");
+            }
+            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
+                ipAddress = request.getRemoteAddr();
+                if (ipAddress.equals("127.0.0.1")) {
+                    // 根据网卡取本机配置的IP
+                    InetAddress inet = null;
+                    try {
+                        inet = InetAddress.getLocalHost();
+                    } catch (UnknownHostException e) {
+                        e.printStackTrace();
+                    }
+                    ipAddress = inet.getHostAddress();
+                }
+            }
+            // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
+            if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
+                // = 15
+                if (ipAddress.indexOf(",") > 0) {
+                    ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
+                }
+            }
+        } catch (Exception e) {
+            ipAddress="";
+        }
+        // ipAddress = this.getRequest().getRemoteAddr();
+
+        return ipAddress;
+    }
+
+}

+ 148 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/util/JwtUtils.java

@@ -0,0 +1,148 @@
+package com.huimv.manager.util;
+
+import io.jsonwebtoken.*;
+import org.springframework.util.DigestUtils;
+import org.springframework.util.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+
+/**
+ * @author yinhao
+ * @since 2021/4/19
+ */
+public class JwtUtils {
+
+    private static final long EXPIRE = 1000 * 60 * 60 * 24;
+    private static final String APP_SECRET = "ukc8BDbRigUDaY6pZFfWus2jZWLPHO";
+    private static final int REFRESH_TIME = 300;
+
+    public static String getJwtToken(Integer id) {
+
+        String JwtToken = Jwts.builder()
+                //头部信息
+                .setHeaderParam("typ", "JWT")
+                .setHeaderParam("alg", "HS256")
+                .setSubject("hm-user")
+                .setIssuedAt(new Date())
+                //过期时间
+                .setExpiration(new Date(System.currentTimeMillis() + EXPIRE))
+                //token主体部分,存储用户信息
+                .claim("id", id)
+                .signWith(SignatureAlgorithm.HS256, APP_SECRET)
+                .compact();
+
+        return JwtToken;
+    }
+
+    /**
+     * 判断token是否存在与有效
+     *
+     * @param jwtToken
+     * @return
+     */
+    public static boolean checkToken(String jwtToken) {
+        if (StringUtils.isEmpty(jwtToken)) {
+            return false;
+        }
+        try {
+            Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 判断token是否存在与有效
+     *
+     * @param request
+     * @return
+     */
+    public static boolean checkToken(HttpServletRequest request) {
+        try {
+            String jwtToken = request.getHeader("token");
+            if (StringUtils.isEmpty(jwtToken)) {
+                return false;
+            }
+            Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 根据token获取会员id
+     *
+     * @param request
+     * @return
+     */
+    public static Integer getMemberIdByJwtToken(HttpServletRequest request) {
+        String jwtToken = request.getHeader("token");
+        if (StringUtils.isEmpty(jwtToken)) {
+            return null;
+        }
+        Claims claims = getClaims(jwtToken);
+        return (Integer) claims.get("id");
+    }
+
+    /**
+     * 根据token获取会员nickname
+     *
+     * @param request
+     * @return
+     */
+    public static String getMemberNicknameByJwtToken(HttpServletRequest request) {
+        String jwtToken = request.getHeader("token");
+        if (StringUtils.isEmpty(jwtToken)) {
+            return "";
+        }
+        Claims claims = getClaims(jwtToken);
+        return (String) claims.get("nickname");
+    }
+
+    /**
+     * 获取claims对象
+     *
+     * @param jwtToken
+     * @return
+     */
+    public static Claims getClaims(String jwtToken) {
+        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
+        return claimsJws.getBody();
+    }
+
+    /**
+     * 是否过期
+     *
+     * @param claims
+     * @return -1:有效,0:有效,1:过期,2:被篡改
+     */
+    public static int verifyToken(Claims claims) {
+        if (claims == null) {
+            return 1;
+        }
+        try {
+            claims.getExpiration()
+                    .before(new Date());
+            // 需要自动刷新TOKEN
+            if ((claims.getExpiration().getTime() - System.currentTimeMillis()) > REFRESH_TIME * 1000) {
+                return -1;
+            } else {
+                return 0;
+            }
+        } catch (ExpiredJwtException ex) {
+            return 1;
+        } catch (Exception e) {
+            return 2;
+        }
+    }
+
+    public static void main(String[] args) {
+        System.out.println(DigestUtils.md5DigestAsHex("123456".getBytes()));
+//        System.out.println(JwtUtils.getJwtToken(10));
+    }
+}

+ 85 - 0
huimv-mobile-video/huimv-manager/src/main/java/com/huimv/manager/util/PropertiesUtils.java

@@ -0,0 +1,85 @@
+package com.huimv.manager.util;
+
+import java.io.*;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.video.util
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2021/3/4 0008 16:03
+ **/
+public  class PropertiesUtils {
+
+    /**
+     * 根据key获取prpperties中的某一项值
+     * @param key
+     * @param fileURL properties地址
+     * @return
+     */
+    public static String getFileIO(String key, String fileURL) {
+        java.util.Properties prop = new java.util.Properties();
+        InputStream in=null;
+        try {
+            in = new BufferedInputStream(new FileInputStream(fileURL));
+            prop.load(in);
+            //根据key 获得所对应的value
+            return prop.getProperty(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                in.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+    /**
+     * 修改并写properties
+     * @param map
+     * @param fileURL
+     * @return
+     */
+    public static boolean writeData(Map<String, Object> map, String fileURL) {
+        java.util.Properties prop = new java.util.Properties();
+        InputStream fis = null;
+        OutputStream fos = null;
+        try {
+            //获得文件
+            File file = new File(fileURL);
+            //查看文件是否存在
+            if (!file.exists()){
+                return false;
+            }
+            fis = new FileInputStream(file);
+            prop.load(fis);
+            fis.close();// 一定要在修改值之前关闭fis
+            fos = new FileOutputStream(file);
+            Iterator<Map.Entry<String, Object>> valueSet = map.entrySet().iterator();
+            //便利map的值
+            while (valueSet.hasNext()) {
+                Map.Entry<String, Object> entry = (Map.Entry<String, Object>) valueSet.next();
+                String key = entry.getKey().toString();
+                String value= entry.getValue().toString();
+                prop.setProperty(key, value);
+                prop.store(fos, "Update '" + key + "' value");
+            }
+            fos.close();
+            return true;
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                fos.close();
+                fis.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return false;
+    }
+}

+ 12 - 2
huimv-mobile-video/huimv-manager/src/main/resources/application-dev.yml

@@ -12,11 +12,21 @@ spring:
   jpa:
     show-sql: true
     database: mysql
-    hibernate:
-      ddl-auto: update
+#    hibernate:
+#      ddl-auto: update
     database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
     open-in-view: true
 
+ # 验证码
+dustlight:
+  captcha:
+    default:
+      store:
+        name: "redisCodeStore"
+    store:
+      redis:
+        key-prefix: "CAPTCHA_CODE"
+
     #  redis:
 #    database: 0
 #    host: 119.3.84.55