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

网站运营难做嘛网站设计费用一览表

网站运营难做嘛,网站设计费用一览表,成都旅游住哪里,廊坊市做网站学习目标#xff1a; 来源#xff1a;黑马教程 使用Redis中BitMap数据结构使用签到功能和连续签到功能 学习产出#xff1a; 解决方案#xff1a; 1. 准备pom环境 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-b…学习目标 来源黑马教程 使用Redis中BitMap数据结构使用签到功能和连续签到功能 学习产出 解决方案 1. 准备pom环境 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scopeversion5.1.47/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.4.3/version/dependency!--hutool--dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.7.17/version/dependencydependencygroupIdorg.redisson/groupIdartifactIdredisson/artifactIdversion3.23.1/version/dependency2. 配置ThreadLocal和过滤器 public class UserHolder {private static final ThreadLocalUserDTO tl new ThreadLocal();public static void saveUser(UserDTO user){tl.set(user);}public static UserDTO getUser(){return tl.get();}public static void removeUser(){tl.remove();} }Configuration public class MvcConfig implements WebMvcConfigurer {Autowiredprivate StringRedisTemplate redis;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).excludePathPatterns(/user/code,/user/login,/blog/hot,/shop/**,/shop-type/**,/voucher/**).order(2);registry.addInterceptor(new RefreshTokenInterceptor(redis)).addPathPatterns(/**).order(1);} } --------------------------------------------- Slf4j public class LoginInterceptor implements HandlerInterceptor {//controller执行之前Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//1.判断是否需要拦截ThreadLocalif (UserHolder.getUser()null) {response.setStatus(401);return false;}//7.放行return true;}//渲染后返回给前台数据前Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {//移除用户避免内存泄露UserHolder.removeUser();} } --------------------------------------------------- Slf4j public class RefreshTokenInterceptor implements HandlerInterceptor {//这个对象不是由spring管理的所以不能用注解自动注入private StringRedisTemplate redis;public RefreshTokenInterceptor(StringRedisTemplate redis) {this.redis redis;}//controller执行之前Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//1.获取请求头中的tokenString token request.getHeader(authorization);if (StrUtil.isBlank(token)) {return true;}//2.基于token获取redis中的用户//通过key取到hash中的map集合数据MapObject, Object userMap redis.opsForHash().entries(login:token: token);//3.判断用户是否存在if (userMap.isEmpty()) {return true;}//5.将查询到的hash数据转为userDto对象UserDTO userDTO BeanUtil.fillBeanWithMap(userMap, new UserDTO(), false);//6.存在保存用户信息到ThreadLocal中UserHolder.saveUser(userDTO);//7.刷新token有效期redis.expire(LOGIN_USER_KEY token, 30, TimeUnit.MINUTES);log.info(我是第一个拦截器当前拦截所有请求的用户为线程为{},{},UserHolder.getUser(),Thread.currentThread());//8.放行return true;}3. Controller层负责接收请求和向下分配 RestController RequestMapping(/user) public class UserController{Resourceprivate IUserService userService;PostMapping(/sign)public Result sign(){return userService.sign();} }4. Service层负责业务的处理逻辑签到功能 Service Slf4j public class UserServiceImpl extends ServiceImplUserMapper, User implements IUserService {private static final ObjectMapper mapper new ObjectMapper();Resourceprivate StringRedisTemplate redis;Overridepublic Result sign() {//1. 获取当前登录用户IdLong userId UserHolder.getUser().getId();//2.获取日期Redis中的offset偏移量是从0开始算偏移量n代表的这个月的第n1天int offset LocalDateTime.now().getDayOfMonth() - 1;//3.拼接key存入RedisLocalDateTime now LocalDateTime.now();String keySuffix now.format(DateTimeFormatter.ofPattern(:yyyyMM));String key sign: userId keySuffix;//true代表的是存入BitMap中的二进制是1redis.opsForValue().setBit(key, offset, true);return Result.ok();} }5. Service层实现连续签到功能 java Service Slf4j public class UserServiceImpl extends ServiceImplUserMapper, User implements IUserService {private static final ObjectMapper mapper new ObjectMapper();Resourceprivate StringRedisTemplate redis;Overridepublic Result signCount() {//1.获取当前登录用户Long userId UserHolder.getUser().getId();//2.获取日期LocalDateTime nowTime LocalDateTime.now();//3.拼接keyString keySuffix nowTime.format(DateTimeFormatter.ofPattern(:yyyyMM));String key sign: userId keySuffix;//4.获取今天是第几天int day nowTime.getDayOfMonth();//5.获取本月截至今天为止所有的签到记录返回的是一个十进制数字ListLong result redis.opsForValue().bitField(key,BitFieldSubCommands.create().get(BitFieldSubCommands.BitFieldType.unsigned(day)).valueAt(0));if (result.isEmpty() || result null) {return Result.ok(0);}Long signCount result.get(0);if (signCount null || signCount 0) {return Result.ok(0);}//6.遍历int count0;while (true) {if ((signCount 1) 0) {//不为0跳出循环break;} else {count;signCount signCount 1;}}//7.签到记录返回的十进制数字与1做 与运算return Result.ok(count);} }
http://www.pierceye.com/news/239020/

相关文章:

  • 惠州市博罗县建设局网站防静电产品东莞网站建设技术支持
  • 茂名整站优化百度一下 你知道首页
  • 郑州网站微信微博维护品牌网站建设流程图
  • 网站建站销售怎么做做门窗安装去哪些网站找生意
  • 太原建站司点击查看荆州网站开发
  • 个人音乐网站开发宁波网站推广工作室电话
  • 建设部网站 造价工程师wordpress忘了秘密
  • 如何分析一个网站建设策划案湖南网络推广公司大全
  • 惠州市建设工程交易中心网站如何制作网页导航栏
  • 保山网站建设哪家好做led视频好的网站
  • 如何利用网站策划做好网站建设申请域名要多少钱
  • 专业做公司logo的网站谷歌网站推广方案
  • 公司网站建设情况说明网站开发用php好吗
  • 网站做关键词库的作用空间怎么做网站
  • 制作网站公司名称网络营销与策划实践报告
  • 哈尔滨手机网站建设价格低长沙网业公司
  • 如皋网站建设公司网站推广优化排名
  • 行业网站方案网站搭建合同
  • 如何用ps做网站图标吉林省长春市建设局网站
  • 北京高端网站建设服务广州百度快速排名优化
  • 电子商务网站开发课程设计网站建设石家庄
  • 好的公司网站有什么用烟台建设集团招聘信息网站
  • 网站制作需要多长时间网站代建设费用
  • 淘宝客网站设计台州建设银行官方网站
  • 婚纱网站建设规划书2023全国企业公司大黄页
  • 网站seo的关键词排名怎么做的wordpress 在线留言
  • 建一个c2c网站要多少钱小程序云开发文档
  • asp网站合法上虞网站设计
  • 网站 用什么数据库蛋糕店网站建设方案
  • 网站上的动效是用ae做的网站开发实训小结