Prison-网关RouteFilter

    技术2022-08-01  57

    类是: RouteFilter

    @Autowired private SupervisedFeignService supervisedFeignService; @Autowired private OrgRankFegignService orgRankFegignService; if(org.apache.commons.lang.StringUtils.isNotBlank(requestURI)&&supervisedFeignService.systemUrlList().contains(requestURI)){ OrganizationalPolicePage user = orgRankFegignService.selectUser(UserUtils.currentUser().getUsername()); SystemUrl systemUrl = supervisedFeignService.getSystemUrl(requestURI); OperationLog operationLog = new OperationLog(); operationLog.setIp(IpAdressUtil.getIpAdrress(ctx.getRequest())); operationLog.setName(user.getName()); operationLog.setOrgName(user.getOrgName()); operationLog.setPoliceCode(user.getPoliceCode()); operationLog.setType(user.getType()); operationLog.setUserName(user.getUsername()); operationLog.setOperationTime(new Date()); operationLog.setOperationDetail(systemUrl.getName()); operationLog.setOperationModule(systemUrl.getOperationModule()); operationLog.setOperationType(systemUrl.getOperationType()); supervisedFeignService.add(operationLog); }

    添加这个 就需要网关? 不写这个就不需要经过网关?

    现在的网关: //@Component

    public class RouteFilter extends ZuulFilter implements InitializingBean{ private UrlPathHelper urlPathHelper = new UrlPathHelper(); private static final Logger log = LoggerFactory.getLogger(RouteFilter.class); @Autowired private RouteLocator routeLocator; @Value("${allow.referer:''}") private String allowReferer; private final Set<String> refererSet = new HashSet<>(10); @Autowired private SupervisedFeignService supervisedFeignService; @Autowired private OrgRankFegignService orgRankFegignService; @Override public void afterPropertiesSet() throws Exception { if(org.apache.commons.lang.StringUtils.isNotBlank(allowReferer)){ String[] referers = allowReferer.split(","); refererSet.addAll(Arrays.asList(referers)); } } @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 0; } @Override public boolean shouldFilter() { RequestContext currentContext = RequestContext.getCurrentContext(); Boolean routeFilter = (Boolean) currentContext.getRequest().getAttribute("RouteFilter"); return routeFilter == null ? true : false;// 是否执行该过滤器,此处为true,说明需要过滤 } @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); String requestURI = this.urlPathHelper.getPathWithinApplication(ctx.getRequest()); ctx.getRequest().setAttribute("RouteFilter", false);//只过滤一次 /* Enumeration<String> en = ctx.getRequest().getHeaderNames(); while(en.hasMoreElements()){ String name = en.nextElement(); System.out.println("name:" + name + ",value:" + ctx.getRequest().getHeader(name)); }*/ if(!"/authorization-server/oauth/token".equals(requestURI)){ if(org.apache.commons.lang.StringUtils.isNotBlank(requestURI)&&supervisedFeignService.systemUrlList().contains(requestURI)){ OrganizationalPolicePage user = orgRankFegignService.selectUser(UserUtils.currentUser().getUsername()); SystemUrl systemUrl = supervisedFeignService.getSystemUrl(requestURI); OperationLog operationLog = new OperationLog(); operationLog.setIp(IpAdressUtil.getIpAdrress(ctx.getRequest())); operationLog.setName(user.getName()); operationLog.setOrgName(user.getOrgName()); operationLog.setPoliceCode(user.getPoliceCode()); operationLog.setType(user.getType()); operationLog.setUserName(user.getUsername()); operationLog.setOperationTime(new Date()); operationLog.setOperationDetail(systemUrl.getName()); operationLog.setOperationModule(systemUrl.getOperationModule()); operationLog.setOperationType(systemUrl.getOperationType()); supervisedFeignService.add(operationLog); } } String originReferer = ctx.getRequest().getHeader("Referer"); log.info("Referer:{}",originReferer); if(!isAllowReferer(originReferer)){ ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(403); ctx.setResponseBody("{\"code\":403,\"msg\":\"Access not allowed\"}"); ctx.getResponse().setContentType("application/json;charset=UTF-8"); return null; } Route route = this.routeLocator.getMatchingRoute(requestURI); if(route == null){ ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(404); ctx.setResponseBody("{\"code\":404,\"msg\":\"path not exsit\"}"); ctx.getResponse().setContentType("application/json;charset=UTF-8"); } return null; } /** * 配置允许访问的referer * @param originReferer * @return */ private boolean isAllowReferer(String originReferer){ if(StringUtils.isEmpty(allowReferer)){ return true; } if(StringUtils.isEmpty(originReferer)){ return false; } for(String referer : refererSet){ if(!StringUtils.isEmpty(referer) && originReferer.startsWith(referer)){ return true; } } return false; } }
    Processed: 0.011, SQL: 9