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

桂林网站定制建设科技公司网站 asp源码

桂林网站定制建设,科技公司网站 asp源码,学做网站要代码,宁波网站制作维护前后端分离的开发中,用户http请求应用服务的接口时, 如果要求检测该用户是否已登录。可以实现的方法有多种, 本示例是通过aop 的方式实现,简单有效。 约定:前端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 引用

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-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,Class<T> clazz){return (T)postData;}@Around("@annotation(Interceptor)") //有标记的地方将实现以下和切入public Object logExecutionTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {//获取切入方法的参数,就是前部请求的json数据Object[] args = proceedingJoinPoint.getArgs();//获取其中的sessionid// requestBase 实体类只有一个参sessionid , 做为其它实体类的父类,用于接收接口上传的参数。RequestBase requestBase=getSessionID(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 ResponseEntity<RequestBase> 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,Class<T> 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 requestBase=getSessionID(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.yayakq.cn/news/796716/

相关文章:

  • 网站设计建设维护与更新网站开发侵权
  • 贵州手机网站建设报送举报网站建设情况
  • 大型网站建设行情宜春企业网站的建设
  • 怎么自己做网站推广长沙房产网签查询系统
  • 网站排名优化软件哪家好中企动力是什么性质的公司
  • 徐汇郑州阳网站建设武昌便宜做网站
  • 专门做外贸的网站seo快速排名公司
  • 眉山网站建设兼职网络营销的特点包含
  • 网站上动画视频怎么做昆明市住房和城乡建设局门户网站
  • 腾讯云 个人网站网站权重数据包
  • 国外做ae模板网站大全海外贸易平台有哪些
  • 南阳市网站制作网站建设与管理的流程方案
  • 建设网站需要准备哪些内容ru后缀的网站
  • 网站备案核验单html网页wordpress
  • 西安网站制作公司有哪家苍山网站建设
  • 网站建设中 模板用虚拟主机做网站
  • 如何在720云网站做全景视频下载制作网页爱心代码
  • 网站底部模板源码抖音代运营图片
  • 网站title如何写合肥专业做网站公司哪家好
  • 传业做微采商城网站wordpress 大站
  • 英文网站注册网站开发的公司推荐
  • 阿里云服务器部署网站太阳能灯网站建设
  • 济南网站建设山东聚搜网见效快wordpress 插件卸载
  • 茂名网站开发公司推荐wordpress兑换卡密
  • 网站主机 流量网站怎么做交易平台
  • 东莞多语言网站建设wordpress媒体库加一个分类
  • 来凡网站建设公司Wordpress编辑工具
  • 电商网站平台石家庄建站网页模板
  • 西宁做网站的有吗百度提交wordpress
  • 天津哪家网站做的好怎么做游戏和网站漏洞