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

网站建站报告2000字查询公司的网站

网站建站报告2000字,查询公司的网站,域名的价格,公司网站制作要多少钱利用自定义注解#xff0c;解决问题 例1 自定义注解限制请求 场景#xff1a;前端发起的频繁的请求#xff0c;导致服务器压力过大。需要对后端接口进行限流处理#xff0c;每个接口都需要做限流处理的话就会导致代码冗余#xff0c;此时就可以利用注解进行解决 非注解形…利用自定义注解解决问题 例1 自定义注解限制请求 场景前端发起的频繁的请求导致服务器压力过大。需要对后端接口进行限流处理每个接口都需要做限流处理的话就会导致代码冗余此时就可以利用注解进行解决 非注解形式 这里是用于 某个用户点击的次数结合radis进行判断也可以用请求的ip进行判断 核心代码 //限流,60秒5次ValueOperations valueOperations redisTemplate.opsForValue();String uri request.getRequestURI();//captcha 0; 这个用于测试Integer count (Integer) valueOperations.get(uri:user.getId());if(count null){valueOperations.set(uri:user.getId(),1,60,TimeUnit.SECONDS);} else if (count5) {valueOperations.increment(uri:user.getId());}else {return RespBean.error(RespBeanEnum.ACCESS_LIMIT_REAHCED);} 完整代码 RequestMapping(value /path,method RequestMethod.GET)ResponseBodypublic RespBean getPath(User user,Long goodsId,String captcha,HttpServletRequest request){if(user null){return RespBean.error(RespBeanEnum.SESSION_ERROR);}//限流,60秒5次ValueOperations valueOperations redisTemplate.opsForValue();String uri request.getRequestURI();log.info(uri:{},uri);log.info(qequestIp{},request.getRemoteAddr());log.info(LocalIp{},request.getLocalAddr());//captcha 0;Integer count (Integer) valueOperations.get(uri:user.getId());if(count null){valueOperations.set(uri:user.getId(),1,60,TimeUnit.SECONDS);} else if (count5) {valueOperations.increment(uri:user.getId());}else {return RespBean.error(RespBeanEnum.ACCESS_LIMIT_REAHCED);}boolean check orderService.checkCaptcha(user,goodsId,captcha);if(!check){return RespBean.error(RespBeanEnum.ERROR_CAPTCHA);}String str orderService.createPath(user,goodsId);return RespBean.success(str);} 注解形式 注解定义方式以AcessLimit为例 定义注解  AccessLimit 创建拦截器 AccessLimitInterceptor 在WebConfig 中添加拦截器 addInterceptors 定义注解AccessLimit Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD) public interface AccessLimit {//时间int second();//次数int maxCount();//这个用于判断是否需要登录后续可用SpringSecurity JWT 实现。boolean needLogin() default true; } 创建拦截器 AccessLimitInterceptor 核心代码 Component public class AccessLimitInterceptor implements HandlerInterceptor {Autowiredprivate RedisTemplate redisTemplate;Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if(handler instanceof HandlerMethod){HandlerMethod hm (HandlerMethod) handler;AccessLimit accessLimit hm.getMethodAnnotation(AccessLimit.class);if( accessLimit null){return true;}int second accessLimit.second();int maxCount accessLimit.maxCount();boolean needLogin accessLimit.needLogin();String key request.getRequestURI();ValueOperations valueOperations redisTemplate.opsForValue();Integer count (Integer) valueOperations.get(key);if(count null){valueOperations.set(key,1,second, TimeUnit.SECONDS);} else if (countmaxCount) {valueOperations.increment(key);} else {render(response,RespBeanEnum.ACCESS_LIMIT_REAHCED);return false;}}return true;} 完整代码 package com.xxx.seckilldemo.annotation;import com.fasterxml.jackson.databind.ObjectMapper; import com.xxx.seckilldemo.config.UserContext; import com.xxx.seckilldemo.pojo.User; import com.xxx.seckilldemo.service.IUserService; import com.xxx.seckilldemo.utils.CookieUtil; import com.xxx.seckilldemo.vo.RespBean; import com.xxx.seckilldemo.vo.RespBeanEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.ObjectInput; import java.io.PrintWriter; import java.util.concurrent.TimeUnit;/** 接口限流拦截器* author Adzc* date 2023/11/15 15:40*/ Component public class AccessLimitInterceptor implements HandlerInterceptor {Autowiredprivate IUserService userService;Autowiredprivate RedisTemplate redisTemplate;Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if(handler instanceof HandlerMethod){User user getUser(request,response);UserContext.setUser(user);HandlerMethod hm (HandlerMethod) handler;AccessLimit accessLimit hm.getMethodAnnotation(AccessLimit.class);if( accessLimit null){return true;}int second accessLimit.second();int maxCount accessLimit.maxCount();//此处是登录相关boolean needLogin accessLimit.needLogin();String key request.getRequestURI();if(needLogin){if (user null){render(response, RespBeanEnum.SESSION_ERROR);return false;}key:user.getId();}//在有效时间内次数的判断ValueOperations valueOperations redisTemplate.opsForValue();Integer count (Integer) valueOperations.get(key);if(count null){valueOperations.set(key,1,second, TimeUnit.SECONDS);} else if (countmaxCount) {valueOperations.increment(key);} else {//返回对象的定义render(response,RespBeanEnum.ACCESS_LIMIT_REAHCED);return false;}}return true;}/*** 获取当前用户* param request* param response* return*/private User getUser(HttpServletRequest request,HttpServletResponse response){String ticket CookieUtil.getCookieValue(request,userTicket);if (StringUtils.isEmpty(ticket)){System.out.println(没有获取到用户);return null;}return userService.getUserByCookie(ticket,request,response);}/*** 构建返回对象* param response* param respBeanEnum*/private void render(HttpServletResponse response,RespBeanEnum respBeanEnum) throws IOException {response.setContentType(application/json);response.setCharacterEncoding(utf-8);PrintWriter out response.getWriter();RespBean respBean RespBean.error(respBeanEnum);out.write(new ObjectMapper().writeValueAsString(respBean));out.flush();out.close();} }返回对象用到了枚举 /*** 公共返回对象* author Adzc* date 2023/9/25 23:19*/Data AllArgsConstructor NoArgsConstructor ToString public class RespBean {private long code;private String message;private Object obj;/*** 成功返回结果* return*/public static RespBean success(){return new RespBean(RespBeanEnum.SUCCESS.getCode(), RespBeanEnum.SUCCESS.getMessage(),null);}public static RespBean success(Object obj){return new RespBean(RespBeanEnum.SUCCESS.getCode(), RespBeanEnum.SUCCESS.getMessage(),obj);}/*** 失败返回结果* param respBeanEnum* return*/public static RespBean error(RespBeanEnum respBeanEnum){return new RespBean(respBeanEnum.getCode(), respBeanEnum.getMessage(),null);}public static RespBean error(RespBeanEnum respBeanEnum,Object obj){return new RespBean(respBeanEnum.getCode(), respBeanEnum.getMessage(),obj);} } Getter ToString AllArgsConstructor public enum RespBeanEnum {SUCCESS(200,SUCCESS),ERROR(500,服务端异常),//登录模块LOGIN_ERROR(500210,用户名或密码不正确),MOBILE_ERROR(500211,非法手机号),BIND_ERROR(500212,参数校验异常),MOBILE_NOT_EXIST(500213, 手机号不存在),PASSWORD_UPDATE_FAIL(500214,密码更新失败),SESSION_ERROR(500215,用户不存在),ACCESS_LIMIT_REAHCED(500504,访问过于频繁请稍后在尝试);private final Integer code;private final String message; } 在WebConfig 中添加拦截器 addInterceptors 核心代码 Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(accessLimitInterceptor);}} 完整代码 Configuration EnableWebMvc public class WebConfig implements WebMvcConfigurer {Autowiredprivate AccessLimitInterceptor accessLimitInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(accessLimitInterceptor);} } 例2 利用JsonSerialize注解自定义类进行手机号脱敏处理 场景很多手机号之类的信息需要在前端页面需要进行脱敏处理 public class PhoneJsonSerializer extends JsonSerializer {Overridepublic void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {if (value ! null value instanceof String){if (!Objects.equals(value,) value.toString().length() 5){String phone value.toString();phone phone.substring(0, 3) ****** phone.substring(phone.length() - 2);gen.writeString(phone);} else {gen.writeObject(value);}} else {gen.writeObject(value);}}} 在返回的对象中使用 JsonSerialize(using PhoneJsonSerializer.class)private String phone;
http://www.pierceye.com/news/826854/

相关文章:

  • 兰州网站制作服务电话博客建站模板
  • 网站后台登陆路径网站网站优化
  • wordpress仿站方法网站图片做伪静态
  • 怎么做一款贷款网站蚌埠seo公司
  • 做羊水亲子鉴定网站企业vi设计公司定制
  • 网站开发和微信开发需要什么人一个服务器放多少网站
  • 做6个页面的网站郑州seo优化顾问热狗
  • 网站建设 落地页中国石化工程建设有限公司怎么样
  • 网站建设 软文发布wordpress调取列表页
  • php网站服务器架设清远哪里有网页设计培训学费
  • 建站开发搜索引擎排名查询
  • 如何建设自己的网站 知乎怎么做电力设计公司网站
  • 效果图代做网站网站服务体系
  • 成都网站开发团队减肥养生网站建设
  • 个人做网站需要资质吗用php做网站的书籍
  • 开发一个交易网站多少钱做哪类网站比较赚钱
  • 帮人做彩票网站支付接口成都网络推广培训哪家好
  • 电子商务网站建设的教案404 not found wordpress
  • 怎样建设一个购物网站什么网站可以做直播
  • 石家庄网站开发培训灵犀科技网站开发佼佼者
  • 做阿里还是网站三个律师做网站合适吗
  • 梅州做网站设计公司网站 在百度搜索不到
  • 临沂门户网站制作微信附近人推广引流
  • 九龙坡区网站建设外贸是什么工作
  • 贵州省住房和城乡建设厅网站报名网网站开发入职转正申请书
  • 外贸平台哪个网站好做dede网站白屏
  • 可信的手机网站建设服装网站ui设计
  • 江苏网站建设效果好技术支持 英铭网站建设
  • 很多网站开发没有框架如何制作的网站模板制作与安装教程视频教程
  • 小说网站建设目的360如何做网站