From 1cd2afb65ee8e745e3cd6fdf06b480343d6406ce Mon Sep 17 00:00:00 2001 From: winLsy <18332763730@163.com> Date: Sun, 25 Mar 2018 22:23:02 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BD=91=E5=85=B3=E5=A2=9E=E5=8A=A0=E5=AF=B9?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=8A=B6=E6=80=81=E7=9A=84=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E7=A6=81=E6=AD=A2=E8=AE=BF=E9=97=AE=E5=8A=9F=E8=83=BD,?= =?UTF-8?q?=E4=BD=BF=E7=94=A8redis=E5=AF=B9=E7=B3=BB=E7=BB=9F=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E8=BF=9B=E8=A1=8C=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- all/docker/flume/Dockerfile | 1 + .../gateway/controller/BigShowController.java | 2 +- .../micro/fast/gateway/feign/SystemFeign.java | 29 ++++++++ .../feign/fallback/SystemFeignFallBack.java | 13 ++++ .../fast/gateway/filter/PreRequestFilter.java | 6 +- .../filter/RecordInformationFilter.java | 4 -- .../gateway/filter/SystemIsOpenFilter.java | 71 +++++++++++++++++++ .../gateway/pojo/{ => vo}/ServiceRank.java | 2 +- .../fast/gateway/service/SystemService.java | 9 +++ .../service/impl/SystemServiceImpl.java | 46 ++++++++++++ .../fast/oauth/feign/UpmsUserService.java | 2 +- .../oauth/impl/UserDetailsServiceImpl.java | 1 + .../src/main/resources/sql/upms.sql | 14 +++- .../micro/fast/upms/dao/UpmsSystemMapper.java | 3 + .../UpmsRolePermissionController.java | 7 +- .../upms/controller/UpmsSystemController.java | 20 ++++-- 16 files changed, 210 insertions(+), 20 deletions(-) create mode 100644 all/docker/flume/Dockerfile create mode 100644 ms/gateway/src/main/java/com/micro/fast/gateway/feign/SystemFeign.java create mode 100644 ms/gateway/src/main/java/com/micro/fast/gateway/feign/fallback/SystemFeignFallBack.java create mode 100644 ms/gateway/src/main/java/com/micro/fast/gateway/filter/SystemIsOpenFilter.java rename ms/gateway/src/main/java/com/micro/fast/gateway/pojo/{ => vo}/ServiceRank.java (86%) create mode 100644 ms/gateway/src/main/java/com/micro/fast/gateway/service/SystemService.java create mode 100644 ms/gateway/src/main/java/com/micro/fast/gateway/service/impl/SystemServiceImpl.java diff --git a/all/docker/flume/Dockerfile b/all/docker/flume/Dockerfile new file mode 100644 index 0000000..a0fc862 --- /dev/null +++ b/all/docker/flume/Dockerfile @@ -0,0 +1 @@ +FROM ubuntu:latest diff --git a/ms/gateway/src/main/java/com/micro/fast/gateway/controller/BigShowController.java b/ms/gateway/src/main/java/com/micro/fast/gateway/controller/BigShowController.java index 35fa55f..0515ceb 100644 --- a/ms/gateway/src/main/java/com/micro/fast/gateway/controller/BigShowController.java +++ b/ms/gateway/src/main/java/com/micro/fast/gateway/controller/BigShowController.java @@ -2,7 +2,7 @@ package com.micro.fast.gateway.controller; import com.micro.fast.boot.starter.common.response.ServerResponse; import com.micro.fast.gateway.filter.RecordInformationFilter; -import com.micro.fast.gateway.pojo.ServiceRank; +import com.micro.fast.gateway.pojo.vo.ServiceRank; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; diff --git a/ms/gateway/src/main/java/com/micro/fast/gateway/feign/SystemFeign.java b/ms/gateway/src/main/java/com/micro/fast/gateway/feign/SystemFeign.java new file mode 100644 index 0000000..811e3fd --- /dev/null +++ b/ms/gateway/src/main/java/com/micro/fast/gateway/feign/SystemFeign.java @@ -0,0 +1,29 @@ +package com.micro.fast.gateway.feign; + +import com.micro.fast.boot.starter.common.response.ServerResponse; +import com.micro.fast.gateway.feign.fallback.SystemFeignFallBack; +import feign.Param; +import org.springframework.cloud.netflix.feign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + *
+ * 远程获取系统信息的类
+ * upms 权限管理系统
+ * 
+ * @author lsy + */ +@FeignClient(fallback = SystemFeignFallBack.class,name = "upms") +public interface SystemFeign { + + /** + * 根据系统的路由查询系统的状态 + * @param route 用户的访问路由 + * @return + */ + @GetMapping("/upmsSystem/getSystemStatusByRoute") + ServerResponse getSystemStatusByPath(@RequestParam("route") String route); + +} diff --git a/ms/gateway/src/main/java/com/micro/fast/gateway/feign/fallback/SystemFeignFallBack.java b/ms/gateway/src/main/java/com/micro/fast/gateway/feign/fallback/SystemFeignFallBack.java new file mode 100644 index 0000000..79b2397 --- /dev/null +++ b/ms/gateway/src/main/java/com/micro/fast/gateway/feign/fallback/SystemFeignFallBack.java @@ -0,0 +1,13 @@ +package com.micro.fast.gateway.feign.fallback; + +import com.micro.fast.boot.starter.common.response.ServerResponse; +import com.micro.fast.gateway.feign.SystemFeign; +import org.springframework.stereotype.Component; + +@Component +public class SystemFeignFallBack implements SystemFeign { + @Override + public ServerResponse getSystemStatusByPath(String path) { + return ServerResponse.errorMsg("系统繁忙,请稍后再试"); + } +} diff --git a/ms/gateway/src/main/java/com/micro/fast/gateway/filter/PreRequestFilter.java b/ms/gateway/src/main/java/com/micro/fast/gateway/filter/PreRequestFilter.java index 562884e..23ee32d 100644 --- a/ms/gateway/src/main/java/com/micro/fast/gateway/filter/PreRequestFilter.java +++ b/ms/gateway/src/main/java/com/micro/fast/gateway/filter/PreRequestFilter.java @@ -27,7 +27,7 @@ public class PreRequestFilter extends ZuulFilter { @Override public int filterOrder() { - return 1; + return 2; } @Override @@ -39,6 +39,10 @@ public class PreRequestFilter extends ZuulFilter { public Object run() { //校验登录状态和访问权限 RequestContext requestContext = RequestContext.getCurrentContext(); + // 如果上一个过滤器终止请求,则终止请求 + if (requestContext.get(SystemIsOpenFilter.IS_SUCCESS).equals(false)){ + return null; + } HttpServletRequest request = requestContext.getRequest(); ServerResponse validate = ValidateJwtToken.validate(request, signingKey); if (validate.isSuccess()) { diff --git a/ms/gateway/src/main/java/com/micro/fast/gateway/filter/RecordInformationFilter.java b/ms/gateway/src/main/java/com/micro/fast/gateway/filter/RecordInformationFilter.java index 8c5c0dd..c7a8e50 100644 --- a/ms/gateway/src/main/java/com/micro/fast/gateway/filter/RecordInformationFilter.java +++ b/ms/gateway/src/main/java/com/micro/fast/gateway/filter/RecordInformationFilter.java @@ -2,16 +2,12 @@ package com.micro.fast.gateway.filter; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; -import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.ZSetOperations; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; -import java.util.Set; -import java.util.SortedMap; /** * 对服务访问者的信息进行记录 diff --git a/ms/gateway/src/main/java/com/micro/fast/gateway/filter/SystemIsOpenFilter.java b/ms/gateway/src/main/java/com/micro/fast/gateway/filter/SystemIsOpenFilter.java new file mode 100644 index 0000000..858d9f6 --- /dev/null +++ b/ms/gateway/src/main/java/com/micro/fast/gateway/filter/SystemIsOpenFilter.java @@ -0,0 +1,71 @@ +package com.micro.fast.gateway.filter; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.micro.fast.boot.starter.common.response.ServerResponse; +import com.micro.fast.gateway.service.SystemService; +import com.netflix.zuul.ZuulFilter; +import com.netflix.zuul.context.RequestContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; + +/** + * 判断服务是否停止访问的过滤器 + * @author lsy + */ +@Component +@Slf4j +public class SystemIsOpenFilter extends ZuulFilter { + + public static final String IS_SUCCESS = "isSuccess"; + + @Autowired + private SystemService systemService; + + @Override + public String filterType() { + return "pre"; + } + + @Override + public int filterOrder() { + return 1; + } + + @Override + public boolean shouldFilter() { + return true; + } + + @Override + public Object run() { + // 获取当前请求对象 + RequestContext currentContext = RequestContext.getCurrentContext(); + HttpServletRequest request = currentContext.getRequest(); + // 获取请求服务的路由 + String requestURI = request.getRequestURI(); + String[] split = requestURI.split("/"); + // 根据系统路由查找系统的开放状态 + boolean b = systemService.systemIsOpen("/" + split[1]); + if (b){ + currentContext.setSendZuulResponse(true); + currentContext.set(IS_SUCCESS,true); + } else{ + // 终止请求 + currentContext.setSendZuulResponse(false); + currentContext.setResponseStatusCode(HttpStatus.INTERNAL_SERVER_ERROR.value()); + ObjectMapper objectMapper = new ObjectMapper(); + try { + currentContext.setResponseBody(objectMapper.writeValueAsString(ServerResponse.errorMsg("system is closed"))); + currentContext.set(IS_SUCCESS,false); + } catch (JsonProcessingException e) { + log.info("对象转换成json失败"); + } + } + return null; + } +} diff --git a/ms/gateway/src/main/java/com/micro/fast/gateway/pojo/ServiceRank.java b/ms/gateway/src/main/java/com/micro/fast/gateway/pojo/vo/ServiceRank.java similarity index 86% rename from ms/gateway/src/main/java/com/micro/fast/gateway/pojo/ServiceRank.java rename to ms/gateway/src/main/java/com/micro/fast/gateway/pojo/vo/ServiceRank.java index a8127bf..b119a57 100644 --- a/ms/gateway/src/main/java/com/micro/fast/gateway/pojo/ServiceRank.java +++ b/ms/gateway/src/main/java/com/micro/fast/gateway/pojo/vo/ServiceRank.java @@ -1,4 +1,4 @@ -package com.micro.fast.gateway.pojo; +package com.micro.fast.gateway.pojo.vo; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/ms/gateway/src/main/java/com/micro/fast/gateway/service/SystemService.java b/ms/gateway/src/main/java/com/micro/fast/gateway/service/SystemService.java new file mode 100644 index 0000000..c2df22f --- /dev/null +++ b/ms/gateway/src/main/java/com/micro/fast/gateway/service/SystemService.java @@ -0,0 +1,9 @@ +package com.micro.fast.gateway.service; + +/** + * 查询系统信息的服务类 + * @author lsy + */ +public interface SystemService { + boolean systemIsOpen(String path); +} diff --git a/ms/gateway/src/main/java/com/micro/fast/gateway/service/impl/SystemServiceImpl.java b/ms/gateway/src/main/java/com/micro/fast/gateway/service/impl/SystemServiceImpl.java new file mode 100644 index 0000000..ea5de46 --- /dev/null +++ b/ms/gateway/src/main/java/com/micro/fast/gateway/service/impl/SystemServiceImpl.java @@ -0,0 +1,46 @@ +package com.micro.fast.gateway.service.impl; + +import com.micro.fast.boot.starter.common.response.ServerResponse; +import com.micro.fast.gateway.feign.SystemFeign; +import com.micro.fast.gateway.service.SystemService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.concurrent.TimeUnit; + +@Service +public class SystemServiceImpl implements SystemService{ + + public static final String GATEWAY_SYSTEM_STATUS = "gateway:systemStatus:"; + public static final int OPEN = 1; + + @Autowired + private SystemFeign systemFeign; + + @Autowired + private RedisTemplate redisTemplate; + + @Override + public boolean systemIsOpen(String path) { + // 尝试从缓存中获取系统的状态 + String status = redisTemplate.opsForValue().get(GATEWAY_SYSTEM_STATUS + path); + if (StringUtils.isBlank(status)){ + // 如果没有缓存,尝试从远程获取 + ServerResponse systemStatusByPath = systemFeign.getSystemStatusByPath(path); + if (systemStatusByPath.isSuccess()){ + // 获取成功就进行缓存 + Integer data = systemStatusByPath.getData(); + redisTemplate.opsForValue().set(GATEWAY_SYSTEM_STATUS+path,String.valueOf(data),60, TimeUnit.SECONDS); + return OPEN == data; + } else { + return false; + } + } else { + return Integer.valueOf(status) == OPEN; + } + + } +} diff --git a/ms/oauth/src/main/java/com/micro/fast/oauth/feign/UpmsUserService.java b/ms/oauth/src/main/java/com/micro/fast/oauth/feign/UpmsUserService.java index cde2a30..584fe86 100644 --- a/ms/oauth/src/main/java/com/micro/fast/oauth/feign/UpmsUserService.java +++ b/ms/oauth/src/main/java/com/micro/fast/oauth/feign/UpmsUserService.java @@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.PathVariable; * 远程获取用户信息 * @author lsy */ -@FeignClient(name = "upms",fallback = UpmsUserServiceFallback.class) +@FeignClient(fallback = UpmsUserServiceFallback.class,name= "upms") public interface UpmsUserService { /** diff --git a/ms/oauth/src/main/java/com/micro/fast/oauth/impl/UserDetailsServiceImpl.java b/ms/oauth/src/main/java/com/micro/fast/oauth/impl/UserDetailsServiceImpl.java index a4e08e6..19cfc6b 100644 --- a/ms/oauth/src/main/java/com/micro/fast/oauth/impl/UserDetailsServiceImpl.java +++ b/ms/oauth/src/main/java/com/micro/fast/oauth/impl/UserDetailsServiceImpl.java @@ -5,6 +5,7 @@ import com.micro.fast.oauth.dto.UpmsUser; import com.micro.fast.oauth.feign.UpmsUserService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; diff --git a/ms/upms/ms-upms-app/src/main/resources/sql/upms.sql b/ms/upms/ms-upms-app/src/main/resources/sql/upms.sql index 0f45f45..beca4c4 100644 --- a/ms/upms/ms-upms-app/src/main/resources/sql/upms.sql +++ b/ms/upms/ms-upms-app/src/main/resources/sql/upms.sql @@ -312,7 +312,17 @@ CREATE TABLE IF NOT EXISTS upms_role_permission ( # 初始化管理员数据 INSERT INTO upms_user VALUE (1,'admin','$2a$10$Tqf5dVNDPBLwGSKrtK4zeuxMHY54qoJgqRQiLQZsLSsFmsWqY/gOa',NULL ,'micro-fast' - ,NULL ,'18332751256','18332763730@163.com',0,0,unix_timestamp(now()),unix_timestamp(now()) ,0); + ,NULL ,'18332751256','18332763133@163.com',0,0,unix_timestamp(now()),unix_timestamp(now()) ,0); # 初始化组织数据 -INSERT INTO upms_organization VALUE (1,0,'micro-fast项目部','负责micro-fast项目开源工作',unix_timestamp(now()),unix_timestamp(now()),0); \ No newline at end of file +INSERT INTO upms_organization VALUE (1,0,'micro-fast项目部','负责micro-fast项目开源工作',unix_timestamp(now()),unix_timestamp(now()),0); + +# 初始化系统数据 +INSERT INTO upms_system (id,basepath,status,name,route,description,title,orders,ctime,version) VALUES + (1,'www.upms.com',1,'upms','/upms','权限管理系统,对后台的用户权限进行控制','权限管理系统',1,unix_timestamp(now()),1), + (2,'www.config.com',1,'config-server','/config-server','配置中心,负责配置管理配置管理','配置管理系统',2,unix_timestamp(now()),1), + (3,'www.zipkin.com',1,'monitor-zipkin','/monitor-zipkin','服务调用监控','服务调用监控系统',3,unix_timestamp(now()),1), + (4,'www.turbine.com',1,'monitor-turbine','/monitor-turbine','服务熔断监控,请求监控和','请求监控系统',4,unix_timestamp(now()),1), + (5,'www.oauth.com',1,'oauth','/oauth','认证中心','认证中心系统',5,unix_timestamp(now()),1), + (6,'www.register1.com',1,'eureka-server','/eureka-server','注册中心','高可用注册中心',6,unix_timestamp(now()),1), + (7,'www.ucenter.com',1,'ucenter','/ucenter','用户管理系统','用户管理系统',7,unix_timestamp(now()),1); diff --git a/ms/upms/ms-upms-dao/src/main/java/com/micro/fast/upms/dao/UpmsSystemMapper.java b/ms/upms/ms-upms-dao/src/main/java/com/micro/fast/upms/dao/UpmsSystemMapper.java index d8d13ca..85d08cc 100644 --- a/ms/upms/ms-upms-dao/src/main/java/com/micro/fast/upms/dao/UpmsSystemMapper.java +++ b/ms/upms/ms-upms-dao/src/main/java/com/micro/fast/upms/dao/UpmsSystemMapper.java @@ -39,4 +39,7 @@ public interface UpmsSystemMapper extends SsmMapper { */ @Select("select status from upms_system where id = #{id}") int selectSystemStatus(Integer id); + + @Select("select status from upms_system where route = #{route}") + int selectSystemStatusByRoute(String route); } \ No newline at end of file diff --git a/ms/upms/ms-upms-web/src/main/java/com/micro/fast/upms/controller/UpmsRolePermissionController.java b/ms/upms/ms-upms-web/src/main/java/com/micro/fast/upms/controller/UpmsRolePermissionController.java index c7a2355..e9f4dbb 100644 --- a/ms/upms/ms-upms-web/src/main/java/com/micro/fast/upms/controller/UpmsRolePermissionController.java +++ b/ms/upms/ms-upms-web/src/main/java/com/micro/fast/upms/controller/UpmsRolePermissionController.java @@ -7,10 +7,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotNull; import java.util.ArrayList; @@ -34,7 +31,7 @@ public class UpmsRolePermissionController { return upmsRolePermissionService.batchAddRolePermission(roleId,permissionIds); } @ApiOperation("给角色批量删除权限") - @PostMapping("/deleteRolePermission") + @DeleteMapping("/deleteRolePermission") public ServerResponse deleteRolePermission(@RequestParam("roleId") @NotNull(message = BaseConst.BASEMSG_PREFIX+"请传入角色id") Integer roleId, @RequestParam("permissionIds") @NotEmpty ArrayList permissionIds){ return upmsRolePermissionService.batchDeleteRolePermission(roleId,permissionIds); diff --git a/ms/upms/ms-upms-web/src/main/java/com/micro/fast/upms/controller/UpmsSystemController.java b/ms/upms/ms-upms-web/src/main/java/com/micro/fast/upms/controller/UpmsSystemController.java index e377211..90882b7 100644 --- a/ms/upms/ms-upms-web/src/main/java/com/micro/fast/upms/controller/UpmsSystemController.java +++ b/ms/upms/ms-upms-web/src/main/java/com/micro/fast/upms/controller/UpmsSystemController.java @@ -2,6 +2,7 @@ package com.micro.fast.upms.controller; import com.micro.fast.boot.starter.common.response.BaseConst; import com.micro.fast.boot.starter.common.response.ServerResponse; +import com.micro.fast.upms.dao.UpmsSystemMapper; import com.micro.fast.upms.pojo.UpmsSystem; import com.micro.fast.upms.service.UpmsSystemService; import io.swagger.annotations.Api; @@ -28,6 +29,9 @@ public class UpmsSystemController { @Autowired private UpmsSystemService upmsSystemService; + @Autowired + private UpmsSystemMapper upmsSystemMapper; + @ApiOperation("添加信息") @PostMapping public ServerResponse addSystem(@Valid UpmsSystem upmsSystem) throws BindException { @@ -56,9 +60,7 @@ public class UpmsSystemController { @ApiOperation("修改信息") @PutMapping - public ServerResponse updateSystem( UpmsSystem upmsSystem, - @RequestParam("id") @NotBlank(message = BaseConst.BASEMSG_PREFIX+"请传入id") String id){ - upmsSystem.setId(Integer.valueOf(id)); + public ServerResponse updateSystem(UpmsSystem upmsSystem){ return upmsSystemService.update(upmsSystem); } @@ -70,9 +72,17 @@ public class UpmsSystemController { } @ApiOperation("根据id查询系统的状态") - @GetMapping("/getSystemIdBySystemId") - public ServerResponse getSystemIdBySystemId( + @GetMapping("/getSystemStatusBySystemId") + public ServerResponse getSystemStatusBySystemId( @NotNull(message = BaseConst.BASEMSG_PREFIX + "请传入系统的id") @RequestParam("systemId") Integer systemId){ return upmsSystemService.getSystemStatus(systemId); } + + @ApiOperation("根据系统路由查找系统的状态") + @GetMapping("/getSystemStatusByRoute") + public ServerResponse getSystemStatusByRoute( + @NotEmpty(message = BaseConst.BASEMSG_PREFIX + "请传入系统的路由") @RequestParam("route") String route){ + int i = upmsSystemMapper.selectSystemStatusByRoute(route); + return ServerResponse.successData(i); + } }