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

科技杭州网站建设装个宽带多少钱

科技杭州网站建设,装个宽带多少钱,贵阳市建设管理信息网站,东阳网站建设有哪些前后端分离的开发中#xff0c;用户http请求应用服务的接口时, 如果要求检测该用户是否已登录。可以实现的方法有多种#xff0c; 本示例是通过aop 的方式实现#xff0c;简单有效。 约定#xff1a;前端http的post 请求 export async function request(url,data) {const … 前后端分离的开发中用户http请求应用服务的接口时, 如果要求检测该用户是否已登录。可以实现的方法有多种 本示例是通过aop 的方式实现简单有效。 约定前端http的post 请求 export async function request(url,data) {const config {method: POST,headers: {Content-Type: application/json},}//每个请求的参数要求附加sessionid, 该sessionid 是登录时生成的const paramsData Object.assign(data,{sessionid:globalData.sessionID || })config.body JSON.stringify(paramsData)try {const res await window.fetch(url, config)if(res.status!200){return {status: res.status,data:{},headers: res.headers,url: res.url,statusText:res.statusText}}return {status: res.status,data:await res.json(),headers: res.headers,url: res.url,}} catch (err) {return {status: 404,data:{},headers: res.headers,url: res.url,statusText:fetch error:err.toString()}}} 1、在pom.xml 引用 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency 2、创建插入标记 Target({ElementType.METHOD}) // 只在对象方法上标记 Retention(RetentionPolicy.RUNTIME) //运行时反射 public interface Interceptor {String additionalMessage() default ; } 3、实现切入类 Aspect Component Slf4j public class LoggingAspect {Autowiredpublic StringRedisTemplate redisTemplatelocate;private T T getSessionID(Object postData,ClassT clazz){return (T)postData;}Around(annotation(Interceptor)) //有标记的地方将实现以下和切入public Object logExecutionTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {//获取切入方法的参数就是前部请求的json数据Object[] args proceedingJoinPoint.getArgs();//获取其中的sessionid// requestBase 实体类只有一个参sessionid , 做为其它实体类的父类用于接收接口上传的参数。RequestBase requestBasegetSessionID(args[0],RequestBase.class);log.info(sessionid:{},requestBase.getSessionid());//检测该sessionid 是否存在(redis)if (requestBase.getSessionid()null || !redisTemplatelocate.hasKey(requestBase.getSessionid())) {//用户未登陆throw new Exception(用户未登陆);}//获取 request 和 responseServletRequestAttributes servletRequestAttributes ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());log.info(request:{},servletRequestAttributes.getRequest());log.info(response:{},servletRequestAttributes.getResponse());MethodSignature methodSignature (MethodSignature) proceedingJoinPoint.getSignature();String className methodSignature.getDeclaringType().getSimpleName();String methodName methodSignature.getMethod().getName();Instant startTime Instant.now();//实行被切入的方法Object result proceedingJoinPoint.proceed();String additionalMessage methodSignature.getMethod().getAnnotation(Interceptor.class).additionalMessage();long elapsedTime Duration.between(startTime, Instant.now()).toMillis();log.info(Class Name: {}, Method Name: {}, Additional Message: {}, Elapsed Time: {}ms,className, methodName, additionalMessage, elapsedTime);log.info(Result: {}, result);return result;} } 4 建立api接口在需要检测的方法上加入Interceptor 就完成切入的检测。 RestController Slf4j public class ExampleController {PostMapping(/t1)Interceptor(additionalMessage 要求检测登录)ResponseBodypublic ResponseEntityRequestBase getData(RequestBody DataRequest req) {try {return new ResponseEntity(req, HttpStatus.OK);} catch (Exception e) {return new ResponseEntity(null, HttpStatus.BAD_REQUEST);}} } 5 实体类 Data public class DataRequest extends RequestBase {private String name; }Data public class RequestBase{private String sessionid; }该方法只适用于少部分需要检测而大部份不需要检测的情况下如果整个包都需要检测的利用execution方 法实现 Pointcut(execution(public * com.example.myapp..*.*(..))) Aspect Component Slf4j public class LoginExecution {Autowiredpublic StringRedisTemplate redisTemplatelocate;private T T getSessionID(Object postData,ClassT clazz){return (T)postData;}//切入点 com.aop.ttt 下的所有public 方法Pointcut(execution(public * com.aop.ttt..*.*(..)))public void publicMethods() {}Around(publicMethods())public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {//获取切入方法的参数就是前部请求的json数据Object[] args joinPoint.getArgs();//获取其中的sessionid// requestBase 实体类只有一个参sessionid , 做为其它实体类的父类用于接收接口上传的参数。RequestBase requestBasegetSessionID(args[0],RequestBase.class);log.info(sessionid:{},requestBase.getSessionid());//检测该sessionid 是否存在(redis)if (requestBase.getSessionid()null || !redisTemplatelocate.hasKey(requestBase.getSessionid())) {//用户未登陆throw new Exception(用户未登陆);}//获取 request 和 responseServletRequestAttributes servletRequestAttributes ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());log.info(request:{},servletRequestAttributes.getRequest());log.info(response:{},servletRequestAttributes.getResponse());MethodSignature methodSignature (MethodSignature) joinPoint.getSignature();String className methodSignature.getDeclaringType().getSimpleName();String methodName methodSignature.getMethod().getName();Instant startTime Instant.now();//实行被切入的方法Object result joinPoint.proceed();long elapsedTime Duration.between(startTime, Instant.now()).toMillis();log.info(Class Name: {}, Method Name: {}, Elapsed Time: {}ms,className, methodName, elapsedTime);log.info(Result: {}, result);return result;} }
http://www.zqtcl.cn/news/41270/

相关文章:

  • 网站素材wordpress小工具里的用户中心
  • 广州 网站建设模板常州做网站公司排名
  • 绵阳专业网站建设公司徐州库云平台
  • 做架构图简单的网站开网页多对什么要求高
  • 免费做简历网站有哪些fusionaccess免费服务器
  • 怎么搜索到自己网站广东建筑人才招聘资讯
  • 建设网站找谁成都代运营公司
  • 外包网站现在开网站做微商赚钱吗
  • 小网站推荐大企业网站制作及维护
  • 影视网站建设策划文案什么网站建设最便宜
  • 官方网站是什么意思深圳网站备案时间
  • 视频网站如何建设东莞网站推广建设
  • 临汾外贸网站建设价格免费建网站软件下载
  • 网站开发背景 目的烟台网站的建设
  • 在百度上如何上传自己的网站如何修改wordpress站
  • 两学一做 网站网站建设公司联系方式
  • 音乐外链网站网页美工怎么做
  • 做app挣钱还是网站营销型网站建设服务
  • 一台电脑如何做网站wordpress微拍源码
  • 网站建设的方法有大理网站建设网站建设
  • 淄博微网站建设天津微信网站
  • 门诊部网站建设wordpress快速插图
  • 网站dns多久刷新广州建站招聘
  • 专业做网站有哪些中国纪检监察报谁题的报名
  • 网站建设项目运作的可行性网站源码大全免费
  • 旅游网站开发的作用做网站备案不少天
  • 玉器珠宝做网站商业空间设计的特点
  • 如何在虚拟机中建设网站wordpress 后台被锁定
  • 徐州html5响应式网站建设桂林象鼻山免费吗
  • 如何实现网站建设服务南京公司网站建设平台