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

安徽金路建设集团有限公司网站wordpress设置描述词

安徽金路建设集团有限公司网站,wordpress设置描述词,营销网站建设专业团队在线服务,纪检网站建设计划书一、评论功能#xff1a; 注意要先登录之后才能进行评论#xff0c;所有把评论加入到登录拦截器当中 Overridepublic void addInterceptors(InterceptorRegistry registry) {//拦截test接口#xff0c;后续实际遇到需要拦截的接口时#xff0c;在配置为真正的拦截接口regis…一、评论功能 注意要先登录之后才能进行评论所有把评论加入到登录拦截器当中 Overridepublic void addInterceptors(InterceptorRegistry registry) {//拦截test接口后续实际遇到需要拦截的接口时在配置为真正的拦截接口registry.addInterceptor(loginInterceptor).addPathPatterns(/test).addPathPatterns(/comments/create/change);}在登录拦截器LoginInterceptor里面存入了用户信息//登录成功 放行//我希望再controller中 直接获取用户的信息 怎么获取UserThreadLocal.put(sysUser);后续在评论的实现类里面可以用gei方法获取到 用户信息 充当评论人//这里直接在线程里面找到登录时候保存的用户信息SysUser sysUser UserThreadLocal.get();1.根据文章id查询评论Overridepublic Result commentsByArticleId(Long id) {/*** 1.根据文章id 查询评论列表 从comments表中查询-* 2.根据作者的id 查询作者的信息* 3.判断 如果 level 1 要去查询它有没有子评论* 4.如果 有 根据评论id 进行查询parent_id*/LambdaQueryWrapperComment queryWrapper new LambdaQueryWrapper();queryWrapper.eq(Comment::getArticleId,id);queryWrapper.eq(Comment::getLevel,1);ListComment comments commentMapper.selectList(queryWrapper);ListCommentVo commentVoList copyList(comments);return Result.success(commentVoList);}private ListCommentVo findCommentsByParentId(Long id) {LambdaQueryWrapperComment queryWrapper new LambdaQueryWrapper();queryWrapper.eq(Comment::getParentId,id);queryWrapper.eq(Comment::getLevel,2);ListComment comments commentMapper.selectList(queryWrapper);return copyList(comments);}将pojo — vo的方法这里有个小巧思分为level大于1和等于1的情况当level等于1时说明可能是楼主会有子评论 private ListCommentVo copyList(ListComment comments) {ListCommentVo commentVoList new ArrayList();for (Comment comment : comments) {commentVoList.add(copy(comment));}return commentVoList;}private CommentVo copy(Comment comment) {CommentVo commentVo new CommentVo();BeanUtils.copyProperties(comment,commentVo);commentVo.setId(String.valueOf(comment.getId()));//作者信息Long authorId comment.getAuthorId();UserVo userVo this.sysUserService.findUserVoById(authorId);commentVo.setAuthor(userVo);//子评论Integer level comment.getLevel();if( 1 level){Long id Long.valueOf(comment.getId());ListCommentVo commentVoList findCommentsByParentId(id);commentVo.setChildrens(commentVoList);}//to User 给谁评论if(level 1){Long toUid comment.getToUid();UserVo toUserVo this.sysUserService.findUserVoById(toUid);commentVo.setToUser(toUserVo);}return commentVo;}精度损失问题 当数据库用的是分布式id的时候前端会出现精度损失问题导致找不到正确的id 此时需要在实体类中,添加相关注解把id转为string分布式id 比较长传到前端 会有精度损失必须转为string类型进行运输就不会有问题了//防止前端精度损失 把id转为stringJsonSerialize(using ToStringSerializer.class)private Long id;二、发布文章 也需要登录过后才能发布文章registry.addInterceptor(loginInterceptor).addPathPatterns(/test).addPathPatterns(/comments/create/change).addPathPatterns(/articles/publish);Overridepublic Result publish(ArticleParam articleParam) {/*** 1.发布文章 目的 构建Article对象* 2.作者id 当前的登录用户* 3.标签 要将标签加入到 关联表中* 4.body 内容存储**/SysUser sysUser UserThreadLocal.get();//登录的用户id就是作者id 而登录的用户 可以去线程中找Article article new Article();article.setAuthorId(Long.valueOf(sysUser.getId()));article.setWeight(Article.Article_Common);article.setViewCounts(0);article.setTitle(articleParam.getTitle());article.setSummary(articleParam.getSummary());article.setCommentCounts(0);article.setCreateDate(System.currentTimeMillis());article.setCategoryId(Long.valueOf(articleParam.getCategory().getId()));//插入之后会生成一个文章idthis.articleMapper.insert(article);//tagListTagVo tags articleParam.getTags();if(tags!null){for (TagVo tag : tags) {Long articleId Long.valueOf(article.getId());ArticleTag articleTag new ArticleTag();articleTag.setTagId(Long.valueOf(tag.getId()));articleTag.setArticleId(articleId);articleTagMapper.insert(articleTag);}}//bodyArticleBody articleBody new ArticleBody();articleBody.setArticleId(Long.valueOf(article.getId()));articleBody.setContent(articleParam.getBody().getContent());articleBody.setContentHtml(articleParam.getBody().getContentHtml());articleBodyMapper.insert(articleBody);article.setBodyId(Long.valueOf(articleBody.getId()));articleMapper.updateById(article);//方法1 articleVo // ArticleVo articleVo new ArticleVo(); // articleVo.setId(article.getId()); // return Result.success(articleVo);//方法2MapString,String map new HashMap();map.put(id,article.getId().toString());//返回字符串避免精度损失问题return Result.success(map);}三、AOP日志 对于 IoC 的一种补充面向切面编程简化程序的一种方式 IoC 简化代码量AOP 实现解耦合的 让代码变得松散灵活更方便扩展和维护 日志输出和业务计算混合在一起耦合在一起不方便维护 解耦合把日志输出和业务计算的代码进行分离 最终程序运行的时候结果还要合到一起 1.在需要记录日志的controller上添加注解PostMapping//加上此注解 代表要对此接口记录日志LogAnnotation(module文章,operator获取文章列表)public Result listArticle(RequestBody PageParams pageParams){return articleService.listArticle(pageParams);}2.创建aop包并且创建annotation类package com.mszlu.blog.common.aop;import java.lang.annotation.*;//Type 代表可以放在类上面 Method代表可以放在方法上面 //ElementType.Type ElementType.METHOD Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented public interface LogAnnotation {String module() default ;String operator() default ; } 3.开花AOP创建LogAspect类 package com.mszlu.blog.common.aop;import com.alibaba.fastjson.JSON; import com.mszlu.blog.common.aop.LogAnnotation; import com.mszlu.blog.utils.HttpContextUtils; import com.mszlu.blog.utils.IpUtils; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method;Component//让spring识别到 Aspect//切面 定义了通知和切点的关系 Slf4j public class LogAspect {Pointcut(annotation(com.mszlu.blog.common.aop.LogAnnotation))public void pt(){}Around(pt())public Object log(ProceedingJoinPoint joinPoint) throws Throwable {long beginTime System.currentTimeMillis();//执行方法Object result joinPoint.proceed();//执行时长(毫秒)long time System.currentTimeMillis() - beginTime;//保存日志recordLog(joinPoint, time);return result;}private void recordLog(ProceedingJoinPoint joinPoint, long time) {MethodSignature signature (MethodSignature) joinPoint.getSignature();Method method signature.getMethod();LogAnnotation logAnnotation method.getAnnotation(LogAnnotation.class);log.info(log start);log.info(module:{},logAnnotation.module());log.info(operator:{},logAnnotation.operator());//请求的方法名String className joinPoint.getTarget().getClass().getName();String methodName signature.getName();log.info(request method:{},className . methodName ());// //请求的参数Object[] args joinPoint.getArgs();String params JSON.toJSONString(args[0]);log.info(params:{},params);//获取request 设置IP地址HttpServletRequest request HttpContextUtils.getHttpServletRequest();log.info(ip:{}, IpUtils.getIpAddr(request));log.info(excute time : {} ms,time);log.info(log end);}} 四、上传图片RestController RequestMapping(upload) public class UploadController {Autowiredprivate QiniuUtils qiniuUtils;PostMapping()public Result upload(RequestParam(image)MultipartFile file){//原始文件名称 比如aa.pngString originalFilename file.getOriginalFilename();String fileName UUID.randomUUID()toString(). StringUtils.substringAfterLast(originalFilename,.);//上传文件 上传在哪儿?//七牛云 云服务器 按量付费 幅度快 把图片发到离用户最近的服务器上//降低 我们自身应用服务器的宽带消耗boolean upload qiniuUtils.upload(file,fileName);if(upload){return Result.success(QiniuUtils.urlfileName);}return Result.fail(20001,上传失败);}我们用的平台是七牛云 首先先要导入依赖dependencygroupIdcom.qiniu/groupIdartifactIdqiniu-java-sdk/artifactIdversion[7.7.0, 7.7.99]/version/dependencyQiniuUtilsComponent public class QiniuUtils {public static final String url http://t0oltruo7.hn-bkt.clouddn.com/;Value(${qiniu.accessKey})private String accessKey;Value(${qiniu.accessSecretKey})private String accessSecretKey;public boolean upload(MultipartFile file,String fileName){//构造一个带指定 Region 对象的配置类Configuration cfg new Configuration(Region.huanan());//...其他参数参考类注释UploadManager uploadManager new UploadManager(cfg);//...生成上传凭证然后准备上传String bucket danb24;//默认不指定key的情况下以文件内容的hash值作为文件名try {byte[] uploadBytes file.getBytes();Auth auth Auth.create(accessKey, accessSecretKey);String upToken auth.uploadToken(bucket);Response response uploadManager.put(uploadBytes, fileName, upToken);//解析上传成功的结果DefaultPutRet putRet JSON.parseObject(response.bodyString(), DefaultPutRet.class);return true;} catch (Exception ex) {ex.printStackTrace();}return false;} }注意点 url就是你在七牛云创建的域名 “http://t0oltruo7.hn-bkt.clouddn.com/”;accessKey和SecretKey在七牛云中获得 并且配置在在properties或者直接赋值不推荐 qiniu.accessKeyNnneEoseKEAqkNNFuaMYWIBU7gn0xdVUbGuBjmGU qiniu.accessSecretKeyG5NBjBLd3OdttFet71AGxjbpahwduNpom_amLe1Gbucket 修改为自己的文件名也可以在配置文件中限制上传文件的值 #上传文件总的最大值 spring.servlet.multipart.max-request-size20MB #单个文件的最大值 spring.servlet.multipart.max-file-size2MB统一缓存处理优化 1.cache包下Cache package com.mszlu.blog.common.cache;import java.lang.annotation.*;// Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented public interface Cache {long expire() default 1 * 60 * 1000;//缓存标识KeyString name() default ;}2.cache包下CacheAspect package com.mszlu.blog.common.cache;import com.alibaba.fastjson.JSON; import com.mszlu.blog.vo.Result; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component;import java.lang.reflect.Method; import java.time.Duration; //aop定义了一个切面 切面定义了切点和通知的关系 Aspect Component Slf4j public class CacheAspect {Autowiredprivate RedisTemplateString, String redisTemplate;//切点Pointcut(annotation(com.mszlu.blog.common.cache.Cache))public void pt(){}//环绕Around(pt())public Object around(ProceedingJoinPoint pjp){try {Signature signature pjp.getSignature();//类名String className pjp.getTarget().getClass().getSimpleName();//调用的方法名String methodName signature.getName();Class[] parameterTypes new Class[pjp.getArgs().length];Object[] args pjp.getArgs();//参数String params ;for(int i0; iargs.length; i) {if(args[i] ! null) {params JSON.toJSONString(args[i]);parameterTypes[i] args[i].getClass();}else {parameterTypes[i] null;}}if (StringUtils.isNotEmpty(params)) {//加密 以防出现key过长以及字符转义获取不到的情况params DigestUtils.md5Hex(params);}Method method pjp.getSignature().getDeclaringType().getMethod(methodName, parameterTypes);//获取Cache注解Cache annotation method.getAnnotation(Cache.class);//缓存过期时间long expire annotation.expire();//缓存名称String name annotation.name();//先从redis获取String redisKey name :: className::methodName::params;String redisValue redisTemplate.opsForValue().get(redisKey);if (StringUtils.isNotEmpty(redisValue)){log.info(走了缓存~~~,{},{},className,methodName);return JSON.parseObject(redisValue, Result.class);}Object proceed pjp.proceed();redisTemplate.opsForValue().set(redisKey,JSON.toJSONString(proceed), Duration.ofMillis(expire));log.info(存入缓存~~~ {},{},className,methodName);return proceed;} catch (Throwable throwable) {throwable.printStackTrace();}return Result.fail(-999,系统错误);}}
http://www.pierceye.com/news/619113/

相关文章:

  • 如何推广外贸型网站wordpress本地环境迁移
  • 网站建设国内外现状网站建设公司 网络服务
  • 百度网站首页福田时代汽车官方网站
  • 网站建设智推网深圳进出口贸易有限公司
  • 网站开发语言pwordpress v4.9.5
  • 东莞建站模板源码东莞注塑切水口东莞网站建设
  • 做文案策划需要看什么网站服装网站开发目的
  • 湖北定制型网站建设微信公众平台网页版
  • 需要做网站的公司有哪些免费网页模板之家
  • 淘客网站怎么备案合肥在线官网
  • 马上飞做的一些网站免费自助建站系统有哪些
  • 建网站投放广告赚钱wordpress全屏弹窗插件
  • 电子商务公司网站模版通辽网站建设公司
  • 国外社交网站建设苏州seo门户网
  • 小程序建站公司唐山网页搜索排名提升
  • 网站后台模板北京网络营销方案
  • 网站如何不被百度搜到浙江网站怎么做推广
  • 网站建设主机类型怎么选diy电子商城网站
  • 中文域名 怎么做网站门户网站建站系统
  • 网站上的个人词条怎么做的做网站推广有用吗
  • 定兴县住房和城乡建设局网站河南省新闻奖
  • 江西省建设工程协会网站查询郑州网站建设一汉狮网络
  • 网站是否含有seo收录功能素材下载平台网站源码
  • 西宁个人网站建设不错的网站建设
  • 海南综合网站两学一做电视夜校做网店网站
  • wordpress分类页面空白网站建设优化哪家好
  • 宁波模板建站哪家服务专业wordpress 神箭手
  • 一张图片网站代码视频生成链接在线工具
  • 网站品牌推广浙江手机版建站系统开发
  • 网站后台密码在哪个文件建站报价表