Prechádzať zdrojové kódy

全景看看作品管理&登录&日志

lyhzzz 3 rokov pred
rodič
commit
14714ce02f
18 zmenil súbory, kde vykonal 646 pridanie a 6 odobranie
  1. 13 1
      4dkankan-center-manage/pom.xml
  2. 198 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/aop/VisitLogInterceptor.java
  3. 102 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/config/SaTokenConfigure.java
  4. 50 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/config/StpInterfaceImpl.java
  5. 34 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/config/WebAppConfig.java
  6. 33 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/controller/LoginController.java
  7. 52 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/controller/OverallController.java
  8. 1 1
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/FdKKClient.java
  9. 13 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/LaserClient.java
  10. 19 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/OverallClient.java
  11. 6 3
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/FdkkAddressSource.java
  12. 22 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/address/LaserAddressSource.java
  13. 22 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/address/OverallAddressSource.java
  14. 11 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/vo/OverallParam.java
  15. 11 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/vo/OverallVo.java
  16. 49 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/service/impl/ManageService.java
  17. 9 0
      4dkankan-center-manage/src/main/java/com/fdkankan/manage/vo/request/ManageLoginRequest.java
  18. 1 1
      4dkankan-center-manage/src/main/resources/bootstrap-dev.yml

+ 13 - 1
4dkankan-center-manage/pom.xml

@@ -80,7 +80,7 @@
     <dependency>
       <groupId>com.dtflys.forest</groupId>
       <artifactId>forest-spring-boot-starter</artifactId>
-      <version>1.5.19</version>
+      <version>1.5.24</version>
     </dependency>
 
 <!--    分布式日志追踪-->
@@ -96,6 +96,18 @@
       <version>3.1.0</version>
     </dependency>
 
+    <!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
+    <dependency>
+      <groupId>cn.dev33</groupId>
+      <artifactId>sa-token-spring-boot-starter</artifactId>
+      <version>1.30.0</version>
+    </dependency>
+    <!-- Sa-Token 整合 jwt -->
+    <dependency>
+      <groupId>cn.dev33</groupId>
+      <artifactId>sa-token-jwt</artifactId>
+      <version>1.30.0</version>
+    </dependency>
 
   </dependencies>
 

+ 198 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/aop/VisitLogInterceptor.java

@@ -0,0 +1,198 @@
+package com.fdkankan.manage.aop;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.servlet.ServletUtil;
+import cn.hutool.http.ContentType;
+import cn.hutool.http.useragent.UserAgent;
+import cn.hutool.http.useragent.UserAgentUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.ServerCode;
+import com.fdkankan.manage.config.SaTokenConfigure;
+import com.fdkankan.manage.entity.OperLog;
+import com.fdkankan.manage.entity.SysUser;
+import com.fdkankan.manage.service.ISysUserService;
+import com.fdkankan.redis.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+
+@Component
+@Aspect
+@Slf4j
+public class VisitLogInterceptor {
+
+	@Autowired
+	private RedisUtil redisUtil;
+
+	@Autowired
+	private MongoTemplate mongoTemplate;
+
+	@Autowired
+	private ISysUserService userService;
+
+	@Value("${server.servlet.context-path:null}")
+	private String contextPath;
+
+	// 切入点表达式
+	@Pointcut("execution(public * com.fdkankan.manage.controller..*.*(..))")
+	public void privilege() {
+	}
+
+	@Around("privilege()")
+	public Object around(ProceedingJoinPoint pjp) throws Throwable {
+
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+
+		//获取客户端ip
+		String clientIP = ServletUtil.getClientIP(request);
+
+		//获取uri
+		String uri = request.getRequestURI();
+		if(StrUtil.isNotEmpty(contextPath)){
+			uri = uri.replaceFirst(contextPath, "");
+		}
+
+		//获取请求方式
+		String method = request.getMethod();
+
+		//获取浏览器信息
+		String browser = this.getBrowser(request);
+
+		//获取参数
+		String params = this.getParams(pjp, request);
+
+		//获取操作路径
+		String requestPath = this.getRequestPath(uri);
+
+        //放行
+		Object result = pjp.proceed();
+		String resultStr = JSON.toJSONString(result);
+		JSONObject jsonObject = JSON.parseObject(resultStr);
+		String msg = "操作失败";
+		if(jsonObject.getInteger("code")== null || jsonObject.getInteger("code").equals(ServerCode.SUCCESS.code())){
+			msg = "操作成功";
+		}
+		//获取用户信息 如果已登录,从token中获取用户信息,如果是登录接口,查询数据库获取用户信息
+		Long userId =null;
+		String userName =null;
+		String nickName =null;
+		try {
+			 userId =   Long.valueOf(StpUtil.getExtra("userId").toString());
+			 userName = (String)StpUtil.getExtra("userName");
+			 nickName = (String)StpUtil.getExtra("nickName");
+		}catch (Exception e){
+			e.printStackTrace();
+			JSONObject paramObj = JSONObject.parseObject(params);
+			userName = paramObj.getString("userName");
+			SysUser sysUser = userService.getByUserName(userName);
+			if(sysUser != null){
+				userId = sysUser.getId();
+				nickName = sysUser.getNickName();
+			}
+		}
+		//写入mongodb
+		OperLog operLog = new OperLog();
+		operLog.setUserId(userId);
+		operLog.setUserName(userName);
+		operLog.setNickName(nickName);
+		operLog.setRequestPath(requestPath);
+		operLog.setUri(uri);
+		operLog.setMethod(method);
+		operLog.setParams(params);
+		operLog.setIp(clientIP);
+		operLog.setBrowser(browser);
+		operLog.setCreateTime(Calendar.getInstance().getTime());
+		operLog.setResult(msg);
+		mongoTemplate.insert(operLog);
+
+		return result;
+	}
+
+	private String getRequestPath(String uri) {
+		if(uri.contains("/login")){
+			return "登录";
+		}
+		JSONObject jsonObject = SaTokenConfigure.manageMenuUrl.get(uri);
+
+		if(StringUtils.isEmpty(jsonObject)){
+			return null;
+		}
+		List<String> list = new ArrayList<>();
+		getMenuName(list,jsonObject.getString("id"));
+		Collections.reverse(list);
+		StringBuilder requestPath = new StringBuilder();
+		for (String path : list) {
+			requestPath.append("[").append(path).append("]").append("->");
+		}
+		int i = requestPath.lastIndexOf("->");
+		if(i < 0){
+			return requestPath.toString();
+		}
+		return requestPath.substring(0,i);
+	}
+
+	private int getMenuName( List<String> list,String menuId){
+		JSONObject jsonObject = SaTokenConfigure.manageMenuId.get(menuId);
+		if(org.springframework.util.StringUtils.isEmpty(jsonObject)){
+			return -1;
+		}
+		list.add( jsonObject.getString("name"));
+		String parentId = jsonObject.getString("parentId");
+		if(!StringUtils.isEmpty(parentId)){
+			return getMenuName(list,parentId);
+		}
+		return 1;
+	}
+
+
+	private String getParams(JoinPoint pjp, HttpServletRequest request){
+
+		// 获取参数名称
+		String[] parameterNamesArgs = ((MethodSignature) pjp.getSignature()).getParameterNames();
+		//获取请求参数值
+		Object[] args = pjp.getArgs();
+
+		Map<String, Object> paramMap = new HashMap<>();
+		String contentType = request.getContentType();
+		if(ContentType.JSON.getValue().equals(contentType)){
+			return JSON.toJSONString(args[0]);
+		}else{
+			for (int i = 0; i < args.length; i++) {
+				if(args[i] instanceof MultipartFile){
+					paramMap.put(parameterNamesArgs[i], ((MultipartFile) args[i]).getOriginalFilename());
+					continue;
+				}
+				paramMap.put(parameterNamesArgs[i], args[i]);
+			}
+		}
+		return JSON.toJSONString(paramMap);
+	}
+
+	private String getBrowser(HttpServletRequest request){
+		String userAgentStr = request.getHeader("User-Agent");
+		UserAgent userAgent = UserAgentUtil.parse(userAgentStr);
+		String browserType = userAgent.getBrowser().toString();
+		String browserVersion = userAgent.getVersion();
+		String browserFormat = "%s(版本%s)";
+		return  String.format(browserFormat, browserType, browserVersion);
+	}
+
+}
+

+ 102 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/config/SaTokenConfigure.java

@@ -0,0 +1,102 @@
+package com.fdkankan.manage.config;
+
+import cn.dev33.satoken.context.SaHolder;
+import cn.dev33.satoken.filter.SaServletFilter;
+import cn.dev33.satoken.jwt.StpLogicJwtForMixin;
+import cn.dev33.satoken.router.SaRouter;
+import cn.dev33.satoken.stp.StpLogic;
+import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.nacos.common.utils.HttpMethod;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.response.ResultData;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.HashMap;
+
+@Configuration
+public class SaTokenConfigure {
+
+    public static HashMap<String, JSONObject> manageMenuUrl = new HashMap<>();
+    public static HashMap<String, JSONObject> manageMenuId = new HashMap<>();
+
+    @Autowired
+    RedisUtil redisUtil;
+    // 注册Sa-Token的拦截器
+    @Bean
+    public SaServletFilter getSaServletFilter() {
+        return new SaServletFilter()
+                // 指定 拦截路由 与 放行路由
+                .addInclude("/**").addExclude("/favicon.ico")
+                // 认证函数: 每次请求执行
+                .setAuth(obj -> {
+                    System.out.println("---------- 进入Sa-Token全局认证 -----------");
+                    // 登录认证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录
+                    SaRouter.match("/**", "/service/manager/login", r ->checkLogin() );
+                    String menu = redisUtil.get(RedisKey.MANAGE_MENU);
+                    if(StringUtils.isBlank(menu)){
+                        SaRouter.match("/**", r -> StpUtil.checkRole("super-admin"));
+                    }
+                    JSONArray menuArray = JSONObject.parseArray(menu);
+                    for (Object o : menuArray) {
+                        JSONObject jsonObject = (JSONObject)  o;
+                        String url = jsonObject.getString("url");
+                        String perm = jsonObject.getString("perms");
+                        manageMenuId.put(jsonObject.getString("id"),jsonObject);
+                        if(StringUtils.isEmpty(url) || StringUtils.isEmpty(perm)){
+                            continue;
+                        }
+                        SaRouter.match(url, r -> StpUtil.checkPermission(perm));
+                        manageMenuUrl.put(jsonObject.getString("url"),jsonObject);
+                    }
+                })
+
+                // 异常处理函数:每次认证函数发生异常时执行此函数
+                .setError(e -> {
+                    System.out.println("---------- 进入Sa-Token异常处理 -----------");
+                    SaHolder.getResponse().setHeader("Content-Type", "application/json;charset=UTF-8");
+                    return JSONObject.toJSONString(ResultData.error(-1,e.getMessage()));
+                })
+                // 前置函数:在每次认证函数之前执行
+                .setBeforeAuth(r -> {
+                    // ---------- 设置一些安全响应头 ----------
+                    SaHolder.getResponse()
+                            .setHeader("Access-Control-Allow-Origin", "*")
+                            .setHeader("Access-Control-Allow-Methods", "*")
+                            .setHeader("Access-Control-Max-Age", "3600")
+                            .setHeader("Access-Control-Allow-Headers", "*")
+                            .setServer("4dkk");
+
+                    // 跳过对 OPTIONS 请求的检查,否则这里会鉴权失败,导致 springboot 配置的 addCorsMappings 跨域不执行
+                    if (SaHolder.getRequest().getMethod().equals(HttpMethod.OPTIONS.toString())) {
+                        SaRouter.back();
+                    }
+                });
+
+    }
+
+    private void checkLogin(){
+        if(!redisUtil.hasKey(String.format(RedisKey.TOKEN_V3,StpUtil.getTokenValue()))){
+            throw new BusinessException(ErrorCode.USER_NOT_LOGIN);
+        }
+        StpUtil.checkLogin();
+    }
+
+
+    // Sa-Token 整合 jwt
+    //Stateless 无状态模式 纯jwt
+    //Mixin 混入模式 jwt 与 Redis 逻辑混合
+    //Simple 简单模式   Token风格替换
+    @Bean
+    public StpLogic getStpLogicJwt() {
+        return new StpLogicJwtForMixin();
+    }
+}
+

+ 50 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/config/StpInterfaceImpl.java

@@ -0,0 +1,50 @@
+package com.fdkankan.manage.config;
+
+import cn.dev33.satoken.stp.StpInterface;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+public class StpInterfaceImpl implements StpInterface {
+
+    @Autowired
+    RedisUtil redisUtil;
+
+    @Override
+    public List<String> getPermissionList(Object loginId, String loginType) {
+        String redisKey = String.format(RedisKey.MANAGE_PERM_USER, loginId);
+        String permString = redisUtil.get(redisKey);
+        if(StringUtils.isBlank(permString)){
+            throw new BusinessException(ErrorCode.USER_NOT_LOGIN);
+        }
+        JSONArray jsonArray = JSONObject.parseArray(permString);
+        List<String> permList = jsonArray.toJavaList(String.class)
+                .parallelStream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
+        //从redis 中获取登录用户权限
+        return permList;
+    }
+
+    @Override
+    public List<String> getRoleList(Object loginId, String loginType) {
+        //从redis 中获取登录用户角色
+        String redisKey = String.format(RedisKey.MANAGE_ROLE_USER, loginId);
+        String roleString = redisUtil.get(redisKey);
+        if(StringUtils.isBlank(roleString)){
+            throw new BusinessException(ErrorCode.USER_NOT_LOGIN);
+        }
+        JSONArray jsonArray = JSONObject.parseArray(roleString);
+        List<String> roleList = jsonArray.toJavaList(String.class)
+                .parallelStream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
+        return roleList;
+    }
+}

+ 34 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/config/WebAppConfig.java

@@ -0,0 +1,34 @@
+package com.fdkankan.manage.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+
+@Configuration
+public class WebAppConfig implements WebMvcConfigurer {
+
+
+	@Override
+	public void addCorsMappings(CorsRegistry registry) {
+		registry.addMapping("/**")
+				.allowCredentials(true)
+				.allowedHeaders("*")
+				.allowedOrigins("*")
+				.allowedMethods("*");
+	}
+
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+		WebMvcConfigurer.super.addInterceptors(registry);
+	}
+
+	@Override
+	public void addResourceHandlers(ResourceHandlerRegistry registry) {
+		WebMvcConfigurer.super.addResourceHandlers(registry);
+	}
+
+}
+

+ 33 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/controller/LoginController.java

@@ -0,0 +1,33 @@
+package com.fdkankan.manage.controller;
+
+import com.fdkankan.common.response.ResultData;
+import com.fdkankan.manage.service.impl.ManageService;
+import com.fdkankan.manage.vo.request.ManageLoginRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/service/manager/")
+public class LoginController {
+
+
+    @Autowired
+    ManageService manageService;
+
+    /**
+     * 登录
+     */
+    @PostMapping("/login")
+    public ResultData login(@RequestBody ManageLoginRequest param) {
+        return ResultData.ok(manageService.login(param.getUserName(),param.getPassword()));
+    }
+    /**
+     * 登出
+     */
+    @GetMapping("/logout")
+    public ResultData logout() {
+        manageService.logout();
+        return ResultData.ok();
+    }
+
+}

+ 52 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/controller/OverallController.java

@@ -0,0 +1,52 @@
+package com.fdkankan.manage.controller;
+
+
+import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.response.PageInfo;
+import com.fdkankan.common.response.ResultData;
+import com.fdkankan.manage.httpClient.OverallClient;
+import com.fdkankan.manage.httpClient.vo.OverallParam;
+import com.fdkankan.manage.httpClient.vo.OverallVo;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+@RestController
+@RequestMapping("/service/manage/overall")
+public class OverallController {
+
+    @Resource
+    OverallClient overallClient;
+
+    @PostMapping("/list")
+    public ResultData list(@RequestBody OverallParam param){
+        OverallVo vo = overallClient.list(param, StpUtil.getTokenValue());
+        if(vo.getCode() != 0 ){
+            return ResultData.error(vo.getCode(),vo.getMsg());
+        }
+        Object data = vo.getData();
+        JSONObject dataObj = JSONObject.parseObject(JSONObject.toJSONString(data));
+        JSONArray array = dataObj.getJSONArray("list");
+        List<Object> list = new ArrayList<>(array);
+        long total = dataObj.getLongValue("total");
+        return ResultData.ok(new PageInfo<>(param.getPageNum(), param.getPageSize(), total, list));
+    }
+
+    @PostMapping("/delete")
+    public ResultData delete(@RequestBody OverallParam param){
+        OverallVo vo = overallClient.delete(param.getId(), StpUtil.getTokenValue());
+        if(vo.getCode() != 0 ){
+            return ResultData.error(vo.getCode(),vo.getMsg());
+        }
+        return ResultData.ok(vo.getData());
+    }
+
+}
+

+ 1 - 1
4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/FdKKClient.java

@@ -4,9 +4,9 @@ import com.alibaba.fastjson.JSONObject;
 import com.dtflys.forest.annotation.Address;
 import com.dtflys.forest.annotation.Get;
 import com.dtflys.forest.annotation.Query;
+import com.fdkankan.manage.httpClient.address.FdkkAddressSource;
 
 import java.util.HashMap;
-import java.util.Map;
 
 /**
  * 获取,调用4dkk服务

+ 13 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/LaserClient.java

@@ -0,0 +1,13 @@
+package com.fdkankan.manage.httpClient;
+
+import com.dtflys.forest.annotation.Address;
+import com.fdkankan.manage.httpClient.address.LaserAddressSource;
+
+/**
+ * 获取,调用4dkk服务
+ */
+@Address(source = LaserAddressSource.class)
+public interface LaserClient {
+
+
+}

+ 19 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/OverallClient.java

@@ -0,0 +1,19 @@
+package com.fdkankan.manage.httpClient;
+
+import com.dtflys.forest.annotation.*;
+import com.fdkankan.manage.httpClient.address.OverallAddressSource;
+import com.fdkankan.manage.httpClient.vo.OverallParam;
+import com.fdkankan.manage.httpClient.vo.OverallVo;
+
+/**
+ * 获取,调用全景看看服务
+ */
+@Address(source = OverallAddressSource.class)
+public interface OverallClient {
+
+    @Post("/manage/age/list")
+    OverallVo list(@JSONBody OverallParam param, @Header("token") String token);
+
+    @Post("/manage/age/remove/{id}")
+    OverallVo delete(@Var("id") String id, @Header("token") String token);
+}

+ 6 - 3
4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/FdkkAddressSource.java

@@ -1,4 +1,4 @@
-package com.fdkankan.manage.httpClient;
+package com.fdkankan.manage.httpClient.address;
 
 import com.dtflys.forest.callback.AddressSource;
 import com.dtflys.forest.http.ForestAddress;
@@ -9,11 +9,14 @@ import org.springframework.stereotype.Component;
 @Component
 public class FdkkAddressSource implements AddressSource {
 
-    @Value("${4dkk.fdService.host}")
+    @Value("${4dkk.fdService.basePath}")
     private String basePath;
 
+    @Value("${4dkk.fdService.port}")
+    private String port;
+
     @Override
     public ForestAddress getAddress(ForestRequest forestRequest) {
-        return new ForestAddress("","",80,basePath);
+        return new ForestAddress("","",Integer.valueOf(port),basePath);
     }
 }

+ 22 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/address/LaserAddressSource.java

@@ -0,0 +1,22 @@
+package com.fdkankan.manage.httpClient.address;
+
+import com.dtflys.forest.callback.AddressSource;
+import com.dtflys.forest.http.ForestAddress;
+import com.dtflys.forest.http.ForestRequest;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class LaserAddressSource implements AddressSource {
+
+    @Value("${4dkk.laserService.basePath}")
+    private String basePath;
+
+    @Value("${4dkk.laserService.port}")
+    private String port;
+
+    @Override
+    public ForestAddress getAddress(ForestRequest forestRequest) {
+        return new ForestAddress("","",Integer.valueOf(port),basePath);
+    }
+}

+ 22 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/address/OverallAddressSource.java

@@ -0,0 +1,22 @@
+package com.fdkankan.manage.httpClient.address;
+
+import com.dtflys.forest.callback.AddressSource;
+import com.dtflys.forest.http.ForestAddress;
+import com.dtflys.forest.http.ForestRequest;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class OverallAddressSource implements AddressSource {
+
+    @Value("${4dkk.overallService.basePath}")
+    private String basePath;
+
+    @Value("${4dkk.overallService.port}")
+    private String port;
+
+    @Override
+    public ForestAddress getAddress(ForestRequest forestRequest) {
+        return new ForestAddress("","",Integer.valueOf(port),basePath);
+    }
+}

+ 11 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/vo/OverallParam.java

@@ -0,0 +1,11 @@
+package com.fdkankan.manage.httpClient.vo;
+
+import lombok.Data;
+
+@Data
+public class OverallParam {
+    private String id;
+    private Long pageNum = 1L;
+    private Long pageSize = 10L;
+    private String searchKey;
+}

+ 11 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/httpClient/vo/OverallVo.java

@@ -0,0 +1,11 @@
+package com.fdkankan.manage.httpClient.vo;
+
+import lombok.Data;
+
+@Data
+public class OverallVo {
+    private Integer code ;
+    private Object data;
+    private String msg;
+    private String timestamp;
+}

+ 49 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/service/impl/ManageService.java

@@ -0,0 +1,49 @@
+package com.fdkankan.manage.service.impl;
+
+import cn.dev33.satoken.stp.SaLoginConfig;
+import cn.dev33.satoken.stp.StpUtil;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.Base64Converter;
+import com.fdkankan.common.util.SecurityUtil;
+import com.fdkankan.manage.api.dto.ManageLoginResponse;
+import com.fdkankan.manage.service.ISysUserService;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ManageService {
+
+    @Autowired
+    ISysUserService sysUserService;
+    @Autowired
+    RedisUtil redisUtil;
+
+
+    public ManageLoginResponse login(String userName, String password) {
+        if(StringUtils.isBlank(userName) || StringUtils.isBlank(password)){
+            throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        //对前端传的密码解密
+        String passwordMd5 = SecurityUtil.MD52(Base64Converter.decode(Base64Converter.subText(password)));
+        ManageLoginResponse result = sysUserService.getUserByUserNameAndPassword(userName, passwordMd5);
+        StpUtil.login(result.getId(), SaLoginConfig
+                .setExtra("userId",result.getId())
+                .setExtra("isAdmin",1)
+                .setExtra("userName",result.getUserName())
+                .setExtra("nickName",result.getNickName()));
+        result.setToken(StpUtil.getTokenValue());
+        redisUtil.set(String.format(RedisKey.TOKEN_V3 ,result.getToken()), "1", 216000);
+        return result;
+    }
+
+
+
+    public void logout() {
+        redisUtil.del(String.format(RedisKey.TOKEN_V3 ,StpUtil.getTokenValue()));
+        StpUtil.logout();
+    }
+}

+ 9 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/vo/request/ManageLoginRequest.java

@@ -0,0 +1,9 @@
+package com.fdkankan.manage.vo.request;
+
+import lombok.Data;
+
+@Data
+public class ManageLoginRequest {
+    private String userName;
+    private String password;
+}

+ 1 - 1
4dkankan-center-manage/src/main/resources/bootstrap-dev.yml

@@ -16,7 +16,7 @@ spring:
             group: DEFAULT_GROUP
             refresh: true
 
-          - data-id: common-redis-config.yaml
+          - data-id: common-redis-config-52.yaml
             group: DEFAULT_GROUP
             refresh: true