当前位置: 首页 > news >正文

义乌网站优化建设会展中心网站平台建设方案

义乌网站优化建设,会展中心网站平台建设方案,公司网站开发的核心技术,苏州新港建设集团有限公司网站过滤器模式#xff08;Filter Pattern#xff09;或标准模式#xff08;Criteria Pattern#xff09;是一种设计模式#xff0c;这种模式允许开发人员使用不同的标准来过滤一组对象#xff0c;通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式…        过滤器模式Filter Pattern或标准模式Criteria Pattern是一种设计模式这种模式允许开发人员使用不同的标准来过滤一组对象通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式它结合多个标准来获得单一标准。 业务场景每次请求通过网关需要验证请求头是否携带 tokensign签名等 类图 AuthService所有滤器类都必须实现的接口 AuthTokenServiceImplToken验证过滤器 AuthSignServiceImpl签名验证过滤器 AuthFactory过滤器工厂利用SpringBoot功能特性实现自动获取过滤器 AuthDTO过滤器所需要的参数 AuthGatewayFilterFactory权限校验过滤器gateway AuthService /*** Author: wmh* Description: 权限校验过滤器* Date: 2023/8/3 18:19* Version: 1.0*/ public interface AuthService {/*** Description: 过滤方法* Param authDTO: 网关上下文* return: String* Author: wmh* Date: 2023/8/3 18:12*/String apply(AuthDTO authDTO);}返回值可以定义为统一返回值R等为了演示方便就返回字符串了 AuthTokenServiceImpl import cn.hutool.core.util.StrUtil; import cn.hutool.jwt.JWT; import cn.hutool.jwt.JWTUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service;/*** Author: wmh* Description: token校验* Date: 2023/8/3 18:21* Version: 1.0*/ Slf4j Order(0) Service public class AuthTokenServiceImpl implements AuthService {/*** Description: 验证token* Param authDTO: 网关上下文* return: com.norinaviation.atm.common.base.data.R* Author: wmh* Date: 2023/8/3 19:31*/OverrideSneakyThrowspublic String apply(AuthDTO authDTO) {String tokenHeader authDTO.getHeaders().getFirst(CommonConstant.X_TOKEN);if (StrUtil.isBlank(appId)) {return appId不能为空;}if (StrUtil.isBlank(tokenHeader)) {return TOKEN不能为空;}JWT jwt JWTUtil.parseToken(tokenHeader);boolean verifyKey jwt.setKey(CommonConstant.JWT_TOKEN.getBytes()).verify();// 验证token是否正确if (!verifyKey) {log.info(appId:{}, TOKEN auth fail, TOKEN:{}, appId, tokenHeader);return TOKEN认证失败;}boolean verifyTime jwt.validate(0);// 验证token是否过期if (!verifyTime) {log.info(appId:{}, TOKEN expired, TOKEN:{}, appId, tokenHeader);return TOKEN已过期;}return success;}} AuthSignServiceImpl import cn.hutool.core.util.StrUtil; import lombok.AllArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; /*** Author: wmh* Description: 验签校验* Date: 2023/8/3 18:24* Version: 1.0*/ Slf4j Order(1) Service public class AuthSignServiceImpl implements AuthService {/*** Description: 验证签名* Param authDTO: 网关上下文* return: Stirng* Author: wmh* Date: 2023/8/3 19:30*/OverrideSneakyThrowspublic Stirng apply(AuthDTO authDTO) {// 签名逻辑业务代码就不公开了return success;}}AuthFactory import cn.hutool.core.util.ObjectUtil; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component;import java.util.*;/*** Author: wmh* Description: 权限工厂* Date: 2023/8/7 15:54* Version: 1.0*/ Component public class AuthFactory implements ApplicationContextAware {/*** 过滤方式*/private ListAuthService authFilters new ArrayList();/*** 获取应用上下文并获取相应的接口实现类* param applicationContext* throws BeansException*/Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {// 获取实现类MapInteger, AuthService authServiceMap new HashMap();applicationContext.getBeansOfType(AuthService.class).values().stream().forEach(authService - {if (ObjectUtil.isNull(authService.getClass().getAnnotation(Order.class))) {authServiceMap.put(CommonConstant.DEFAULT_ORDER, authService);}else {authServiceMap.put(authService.getClass().getAnnotation(Order.class).value(), authService);}});// 根据order排序authServiceMap.entrySet().stream().sorted(Comparator.comparing(e - e.getKey())).forEach(map - {authFilters.add(map.getValue());});}/*** Description: 是否全部符合过滤条件* Param authDTO: 网关上下文* return: String* Author: wmh* Date: 2023/8/3 19:27*/public String apply(AuthDTO authDTO) {for (AuthService filter : authFilters) {String str filter.apply(authDTO);if (!StrUtil.equals(str, success)) {return str;}}return success;}}AuthDTO import lombok.Data; import org.springframework.http.HttpHeaders; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap;/*** Author: wmh* Description: 网关上下文* Date: 2023/8/3 19:09* Version: 1.0*/ Data public class AuthDTO {/*** cache headers*/private HttpHeaders headers;/*** cache json body*/private String cacheBody;/*** cache formdata*/private MultiValueMapString, String formData new LinkedMultiValueMap();}此类为gateway网关需要只展示使用过滤链的代码块 AuthGatewayFilterFactory /*** Author: wmh* Description: 权限校验过滤器* Date: 2023/8/3 19:15* Version: 1.0*/ Slf4j Component public class AuthGatewayFilterFactory extends AbstractGatewayFilterFactory {Autowiredprivate AuthFactory authFactory;Overridepublic GatewayFilter apply(Config config) {return (exchange, chain) - {ServerHttpRequest serverHttpRequest exchange.getRequest();...// 获取request bodyGatewayContext gatewayContext exchange.getAttribute(GatewayContext.CACHE_GATEWAY_CONTEXT);AuthDTO authDTO new AuthDTO();authDTO.setHeaders(gatewayContext.getHeaders());authDTO.setCacheBody(gatewayContext.getCacheBody());authDTO.setFormData(gatewayContext.getFormData());// 验证String strr authFactory.apply(authDTO);...return chain.filter(exchange);};}} Gateway相关SpringCloud-Gateway实现网关_springcloud配置网关_W_Meng_H的博客-CSDN博客网关作为流量的入口常用的功能包括路由转发、权限校验、限流等Spring Cloud 是Spring官方推出的第二代网关框架由WebFluxNettyReactor实现的响应式的API网关它不能在传统的servlet容器工作也不能构建war包。基于Filter的方式提供网关的基本功能例如说安全认证、监控、限流等。_springcloud配置网关https://blog.csdn.net/W_Meng_H/article/details/129775851 CommonConstant常量类 /*** Author: wmh* Description: 常用变量* Date: 2023/3/30 10:29* Version: 1.0*/ Component public class CommonConstant {// JWT密钥public static String JWT_TOKEN;// 请求头中的tokenpublic static final String X_TOKEN X-TOKEN;// 请求头中的签名public static final String X_SIGN X-SIGN;// 请求头中的appIdpublic static final String X_APPID X-APPID;// 请求头中的时间戳public static final String X_TIMESTAMP X-TIMESTAMP;}
http://www.pierceye.com/news/832494/

相关文章:

  • 深圳市多语言网站建设公司营销网站建设公司哪家好
  • 网站推广是怎么做的仿腾讯网站源码
  • 北京市建设工程信息网站网站建设需要域名吗?
  • 做金融的网站有哪些阳江房地产信息网官方网站
  • h5能做网站开发吗黑链 对网站的影响
  • 专门做设计文案的网站wordpress 建站服务
  • 网站快速排名公司wordpress 插件 原理
  • 网站制作需要学什么公司网站管理属于什么职位
  • 南通专业企业门户网站设计学校怎么创建网站
  • 网站策划与建设阶段的推广方法中国建设教育协会安全员证
  • 建设银行网站用户名更改分销微信小程序开发
  • 荣成做网站的公司百度地图 wordpress
  • 扁平设计网站湖南健康二维码app下载安装
  • 大连成久建设工程有限公司网站针对爬虫爬取做的优化
  • 建设官方网站企业网银登录网站版面设计
  • 网站建设学什么软件怎样创建自己的公众号
  • 网站脑图怎么做云伙伴小程序开发公司
  • 网站设置兼容模式怎么弄wordpress文件架构
  • 网站模块顺序调整网易对象存储wordpress
  • 深圳网络建设网站郑州网站优化服务
  • 辽阳专业建设网站公司网站html动态效果代码
  • 微信上可以做网站吗网页设计作业讲解
  • 长春好的做网站公司潍坊 网站
  • 做网站自己装服务器谷歌排名规则
  • 58.搜房等网站怎么做效果才好商贸公司企业简介模板
  • 中国最早做网站是谁卖网站怎样做
  • 张店专业网站优化哪家好书画工作室网站模板网站建设
  • 兰州网站制作怎么样青海哪家做网站的公司最大
  • 云龙湖旅游景区网站建设招标网站升级改版需要几天
  • 高端大气网络设计建设公司网站织梦模板沈阳模板建站哪家好