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

网站建设维护费怎么说前端开发年终总结

网站建设维护费怎么说,前端开发年终总结,网络域名备案,常见网站架构前言#xff1a;使用dubbo做为通信组件#xff0c;如果接口需要鉴权#xff0c;和日志记录需要怎样处理#xff1b; 1 鉴权#xff1a; 1.1 在bootstrap.yml 中定义过滤器#xff1a; dubbo.provider.filter: 过滤器的名字#xff1a; 1.2 resources 目录下创建配置文…前言使用dubbo做为通信组件如果接口需要鉴权和日志记录需要怎样处理 1 鉴权 1.1 在bootstrap.yml 中定义过滤器 dubbo.provider.filter: 过滤器的名字 1.2 resources 目录下创建配置文件 1 resources 创建目录/META-INF/dubbo 2 创建文件名字为org.apache.dubbo.rpc.Filter 的纯文本文件 3 定义过滤器 过滤器名字过滤器路径地址 4服务提供端DubboTokenFilter package org.lgx.bluegrass.bluegrasses.dubbofilter;import org.apache.dubbo.rpc.*; import org.apache.dubbo.rpc.filter.TokenFilter; import org.lgx.bluegrass.api.common.dto.ResponseDTO; import org.lgx.bluegrass.bluegrasses.util.ApplicationContextUtils; import org.lgx.bluegrass.bluegrasses.util.RedisUtil; import org.springframework.util.StringUtils;/*** Description TODO* Date 2023/3/7 15:38* Author lgx* Version 1.0*/ public class DubboTokenFilter extends TokenFilter {private RedisUtil redisUtil;Overridepublic Result invoke(Invoker? invoker, Invocation invocation) throws RpcException {String isNeedToken invoker.getUrl().getParameter(Constants.TOKEN_KEY);// 是否需要进行token 验证if (StringUtils.hasText(isNeedToken)) {// 获取消费端传入的tokenString clientToken1 invocation.getAttachment(dubbo_accesstoken);// 获取服务端的tokenString serverToken getServerToken();// token验证并且统一封装返回结果if (!serverToken.equals(clientToken1)) {// token 异常则直接封装ResponseDTO 并返回return AsyncRpcResult.newDefaultAsyncResult(ResponseDTO.defaultResponse(token illegal), invocation);// 也可以抛出异常// Class? serviceType invoker.getInterface();// throw new RpcException(Invalid token! Forbid invoke remote service serviceType method invocation.getMethodName() () from consumer RpcContext.getContext().getRemoteHost() to provider RpcContext.getContext().getLocalHost());}}return invoker.invoke(invocation);}// 从redis 中获取token 业务自行实现private String getServerToken() {if (null redisUtil) {redisUtil (RedisUtil) ApplicationContextUtils.getBean(redisUtil);}String accessToken redisUtil.get(dubbo_accesstoken);return 1234;} } ResponseDTO 封装类 // loomback 插件 Data Accessors(chain true) public class ResponseDTOT implements Serializable {private static final long serialVersionUID 3918877423924837166L;private int code 200;private T body;private String msg;private boolean redirect true;private ListResponseMessage messages;private ListString message new ArrayList();private int errNum;private String errorMsg;private Object errorObject;private boolean success true;public static T ResponseDTO defaultResponse(T t) {return new ResponseDTO().setCode(BizHttpStatus.HTTP_STATUS_200.getStatus()).setBody(t);} }RedisUtil 封装类stringRedisTemplate bean 自行配置实现 Component public class RedisUtil {AutowiredQualifier(stringRedisTemplate)private StringRedisTemplate redisTemplate;public void setRedisTemplate(StringRedisTemplate redisTemplate) {this.redisTemplate redisTemplate;}public StringRedisTemplate getRedisTemplate() {return this.redisTemplate;}/*** 获取指定 key 的值** param key* return*/public String get(String key) {return redisTemplate.opsForValue().get(key);}/*** 设置指定 key 的值** param key* param value*/public void set(String key, String value) {redisTemplate.opsForValue().set(key, value);} }服务业务类提供者 DubboTestServiceImpl import org.apache.dubbo.config.annotation.DubboService; import org.lgx.bluegrass.api.common.dto.ResponseDTO; import org.lgx.bluegrass.api.service.DubboTestService;/*** Description TODO* Date 2023/2/23 15:50* Author lgx* Version 1.0*/ // dubbo 服务暴露标识token 1234 定义token验证标识 DubboService(token 1234) public class DubboTestServiceImpl implements DubboTestService {Overridepublic ResponseDTO test(String token) {return ResponseDTO.defaultResponse(hello es token);} } 服务定义DubboThreeService public interface DubboThreeService {ResponseDTO testOne(String token); } 5 消费端同服务提供端12,3,相同 定义好过滤器 定义消费端token 填充 DubboTokenFilter public class DubboTokenFilter implements Filter {private RedisUtil redisUtil;Overridepublic Result invoke(Invoker? invoker, Invocation inv) throws RpcException {if (null redisUtil) {Object obj ApplicationContextUtils.getBean(redisUtil);if (null ! obj){redisUtil (RedisUtil) obj;}}String isNeedToken invoker.getUrl().getParameter(Constants.TOKEN_KEY);// 是否需要进行token 验证if (StringUtils.hasText(isNeedToken)) {// Constants.TOKEN_KEY, 1234 便于跳过duboo 内置的token 验证// 1234 对应服务提供端业务实现类中定义的token DubboService(token 1234)inv.setAttachment(Constants.TOKEN_KEY, 1234);// 设置本次真正需要验证的tokeninv.setAttachment(dubbo_accesstoken, 1234qazwsxedc);}// 远程接口调用return invoker.invoke(inv);} }6 消费端测试 RestController public class DubboRpcController {DubboReferenceprivate DubboTestService dubboTestService;RequestMapping(value /dubbo-test, method RequestMethod.GET)public String index(RequestParam(token) String token) {return dubboTestService.test(token).toString();} }2 日志记录 DubboAccessLogFilter import org.apache.dubbo.common.logger.Logger; import org.apache.dubbo.common.logger.LoggerFactory; import org.apache.dubbo.common.utils.ConfigUtils; import org.apache.dubbo.rpc.*; import org.apache.dubbo.rpc.support.AccessLogData;import java.util.Date;/*** Description TODO* Date 2023/3/8 16:48* Author lgx* Version 1.0*/ public class DubboAccessLogFilter implements Filter {private static final Logger logger LoggerFactory.getLogger(DubboAccessLogFilter.class);Overridepublic Result invoke(Invoker? invoker, Invocation inv) throws RpcException {try {// 是否需要对改接口进行日志记录String accessLogKey invoker.getUrl().getParameter(accesslog);if (ConfigUtils.isNotEmpty(accessLogKey)) {// 请求的数据AccessLogData logData this.buildAccessLogData(invoker, inv);// save logsaveLog(logData);}} catch (Throwable var5) {logger.warn(Exception in AccessLogFilter of service( invoker - inv ), var5);}return invoker.invoke(inv);}// 自行实现数据的保存private void saveLog(AccessLogData logData) {}private AccessLogData buildAccessLogData(Invoker? invoker, Invocation inv) {AccessLogData logData AccessLogData.newLogData();logData.setServiceName(invoker.getInterface().getName());logData.setMethodName(inv.getMethodName());logData.setVersion(invoker.getUrl().getParameter(version));logData.setGroup(invoker.getUrl().getParameter(group));logData.setInvocationTime(new Date());logData.setTypes(inv.getParameterTypes());logData.setArguments(inv.getArguments());return logData;} } 服务业务提供端 // accesslog 日志记录标识 DubboService(accesslog 123) public class DubboTestServiceTwoImpl implements DubboTestTwoService {Overridepublic ResponseDTO sayHello() {MapString,Object result new HashMap(12);result.put(data,Hello !);result.put(success,true);result.put(code,200);return ResponseDTO.defaultResponse(result);} }3 数据统一封装 AppendedFilter: import org.apache.dubbo.rpc.*; import org.lgx.bluegrass.api.common.dto.ResponseDTO;/*** Description TODO* Date 2023/3/7 11:00* Author lgx* Version 1.0*/ public class AppendedFilter implements Filter {Overridepublic Result invoke(Invoker? invoker, Invocation invocation) throws RpcException {Result result invoker.invoke(invocation);Result appResponse ((AsyncRpcResult) result).getAppResponse();Object data appResponse.getValue();if (data instanceof ResponseDTO) {return result;}// 统一进行ResponseDTO 格式数据封装返回appResponse.setValue(ResponseDTO.defaultResponse(data));return result;} } 参考 1 调用拦截扩展
http://www.hkea.cn/news/14535622/

相关文章:

  • 织梦调用网站备案号创客贴官网
  • 杭州网站建设找思创韩国建筑网站
  • 做外贸有必要做个网站吗馆陶网站建设价格
  • 交互性强的网站福建建设厅官网
  • 一级网站建设做电影网站多少钱
  • c2c网站架构做网站需要数据储存么
  • 企业一站式网站建设wordpress文库主题
  • 做一个旅游团网站怎么做群晖 wordpress 端口 转发
  • 360建站平台深圳工业设计师工资一般多少
  • 大连微信网站开发深圳网站建设排行
  • 百度开放云制作网站wordpress积分主题
  • 免费网站空间有什么用网站上展示手机页面是怎么做的
  • 绚丽的网站欣赏有没有专门的销售公司
  • 泰安微信网站建设修改wordpress文章发布页面模板
  • htmi 个人小网站 模板广州网站开发水平广州亦客网络
  • 国外好的室内设计网站网站建设公司排行
  • 网站开发者工资互联网营销是干什么
  • 好用的html 模板网站免费友链互换
  • 贵阳建站推广公司重庆市工程建设信息网官网新域名
  • 展会网站模板wordpress登录400错误
  • 网站建设拾金手指下拉十九企业网站开发上海韵茵
  • 可信网站认证 服务中心网站设计画布规范1680
  • 宁波网站制作设计网站怎么做404页面的跳转
  • 网站模板下载工具哪个网站可以做字体大小
  • 创业网站平台排名wordpress外链跳转样式
  • 公司域名更改 网站怎么做提示wordpress外观小工具
  • 专业做网站的团队推荐南通住房和城乡建设局网站首页
  • iis7.5发布网站教程网站名字大全有哪些
  • 有设计感的网站wordpress自己发文章
  • 动易 网站顶部导航 sitefactory企业网站建设流程的第一步工作是