范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

从零开始,手打一个权限管理系统(第五章权限控制)

  前言
  这章主要通过SpringSecurity来实现对权限的控制,权限粒度是到每个方法。 一、token验证
  第四章登录我们获取到了token,每次请求的时候都必须验证这个token是否合法、是否过期,所以我们需要一个拦截器来拦截每一次的请求;这里我们可以通过继承OncePerRequestFilter来实现我们对token的验证;当然并不是所有请求都需要拦截,所以还需要一个白名单,来配置不需要被拦截的请求。@Slf4j @Configuration @ConfigurationProperties(prefix = "security.white") public class PermitUrlProperties {      @Getter     @Setter     private List urls = new ArrayList<>();  }
  yml配置: security:   white:     urls:       - /login       - /logout
  JwtAuthenticationTokenFilter /**  * token拦截验证  */ @Slf4j public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {      @Autowired     private JWTUtil jwtUtil;      @Autowired     private PermitUrlProperties permitUrlProperties;      @Override     protected void initFilterBean() throws ServletException {         System.out.println("JwtAuthenticationTokenFilter初始化...");     }      @Override     protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {         String requestUrl = httpServletRequest.getRequestURI();         log.info("请求url:{}", requestUrl);         // 白名单url放过         if (filterWhiteUrl(requestUrl)) {             filterChain.doFilter(httpServletRequest, httpServletResponse);             return;         }          String authToken = httpServletRequest.getHeader(SecurityConstants.AUTHORIZATION);         if (StrUtil.isBlank(authToken)) {             Result result = Result.fail();             result.setMsg("未登录");             ResponseUtil.response(httpServletResponse, result);             return;         }         boolean checkToken = jwtUtil.checkToken(authToken);         if (checkToken) {             Result result = Result.fail();             result.setMsg("会话已过期,请重新登录");             httpServletResponse.setStatus(HttpStatus.HTTP_UNAUTHORIZED);             ResponseUtil.response(httpServletResponse, result);             return;         }          if (SecurityContextHolder.getContext().getAuthentication() == null) {             //Context中的认证为空,进行token验证             Claims claims = jwtUtil.getClaimsFromToken(authToken);             //从jwt中恢复用户信息和权限             String id = claims.get(JWTUtil.ID, String.class);             String orgId = claims.get(JWTUtil.ORGID, String.class);             String username = claims.get(JWTUtil.USERNAME, String.class);             String authorities = claims.get(JWTUtil.AUTHORITIES, String.class);             List list = JSON.parseObject(authorities, new TypeReference>() {             });             JwtUser jwtUser = new JwtUser(id, orgId, username, "", AuthorityUtils.createAuthorityList(list.toArray(new String[0])));             //如username不为空,并且能够在数据库中查到             JwtAuthenticationToken jwtAuthenticationToken =                     new JwtAuthenticationToken(jwtUser.getAuthorities(), jwtUser, null);             //将authentication放入SecurityContextHolder中             SecurityContextHolder.getContext().setAuthentication(jwtAuthenticationToken);         }         filterChain.doFilter(httpServletRequest, httpServletResponse);     }      /**      * 过滤表名单的url      *      * @param url      * @return      */     private boolean filterWhiteUrl(String url) {         List whiteList = permitUrlProperties.getUrls();         if (CollectionUtil.isNotEmpty(whiteList)) {             PathMatcher matcher = new AntPathMatcher();             for (String releaseUrl : whiteList) {                 boolean match = matcher.match(releaseUrl, url);                 if (match) {                     return true;                 }             }         }         return false;     } }
  更新下SpringSecurityConfigurer,将JwtAuthenticationTokenFilter加入配置中,部分代码如下:   http.addFilterAfter(jwtAuthenticationTokenFilter(),UsernamePasswordAuthenticationFilter.class);    @Bean     JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter() {         return new JwtAuthenticationTokenFilter();     }
  经过一系列的编译调试后,启动项目验证:
  1、获取token
  2、不带token访问主页
  3、带token访问主页
  4、token错误和过期访问主页
  二、权限验证1、开启全局安全配置
  在SpringSecurityConfigurer上加上@EnableGlobalMethodSecurity(prePostEnabled = true)就可以了;他会解锁 @PreAuthorize 和 @PostAuthorize 两个注解,@PreAuthorize 会在方法执行前进行验证, @PostAuthorize 会在方法执行后进行验证。 2、标记需要校验的方法
  我们在IndexController上面加上权限校验,即@PreAuthorize("hasAuthority("sys:index")")
  3、自定义未授权处理器
  实现AccessDeniedHandler的handle接口即可
  JwtAccessDeniedHandler /**  * 未授权访问处理  */ public class JwtAccessDeniedHandler implements AccessDeniedHandler {     @Override     public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AccessDeniedException e) throws IOException, ServletException {          Result result = Result.fail(e.getMessage());         httpServletResponse.setStatus(HttpStatus.HTTP_FORBIDDEN);         ResponseUtil.response(httpServletResponse, result);     } }
  把这个加到SpringSecurityConfigurer里面,新增代码如下:   .exceptionHandling((execption) -> execption                         // 未授权异常处理                         .accessDeniedHandler(new JwtAccessDeniedHandler()));
  测试未授权
  测试已授权
  在JwtUserDetailsServiceImpl的权限列表中加入我们刚刚加的权限标记sys:index
  重新登录,获取新的token,并请求主页,发现能够正常访问
  3、通过数据库配置权限
  前面都是写死的权限,实际项目都是从数据库中查询的,这个项目我们采用RBAC 基于角色的访问控制,将所有权限都赋给角色,将角色赋给具体的用户。 3.1、表设计
  用户表sys_user,用来存放用户名、密码等基础信息 CREATE TABLE `sys_user`  (   `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT "主键ID",   `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT "用户名",   `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,   `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT "电话",   `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT "头像",   `org_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT "机构ID",   `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间",   `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "修改时间",   `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT "1" COMMENT "1-正常,0-锁定",   `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT "1" COMMENT "逻辑删除标记(1:显示;0:删除)",   PRIMARY KEY (`id`) USING BTREE,   UNIQUE INDEX `uk_username`(`username`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = "用户表" ROW_FORMAT = Dynamic;
  组织机构表sys_org CREATE TABLE `sys_org`  (   `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,   `parent_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,   `sort` int NULL DEFAULT 1 COMMENT "排序",   `type` char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT "机构类型",   `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT "机构编码",   `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT "机构名称",   `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT "电话",   `email` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT "邮箱",   `address` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT "地址",   `remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT "备注",   `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT "1" COMMENT "逻辑删除标记(1:显示;0:删除)",   `status` char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT "1:正常,0:锁定", 	`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间",   `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT "修改时间",   PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = "机构管理" ROW_FORMAT = Dynamic;
  菜单表sys_menu,存放对应的菜单和权限标识 CREATE TABLE `sys_menu`  (   `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "菜单ID",   `title` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "菜单名称",   `permission` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT "权限标识",   `parent_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT "父菜单ID",   `sort` int NOT NULL DEFAULT 0 COMMENT "排序值",   `type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT "菜单类型 (0菜单 1按钮)",   `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间",   `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "更新时间",   `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT "1" COMMENT "逻辑删除标记(1:显示;0:删除)",   PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = "菜单权限表" ROW_FORMAT = Dynamic;
  角色表sys_role CREATE TABLE `sys_role`  (   `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT "主键",   `role_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT "角色名",   `role_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT "角色编码",   `role_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT "角色描述",   `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间",   `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT "修改时间",   `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT "1" COMMENT "逻辑删除标记(1:显示;0:删除)",   PRIMARY KEY (`id`) USING BTREE,   UNIQUE INDEX `role_id_role_code`(`role_code`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = "系统角色表" ROW_FORMAT = Dynamic;
  角色菜单关系表sys_role_menu,一个角色拥有哪些菜单的权限 CREATE TABLE `sys_role_menu`  (   `role_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "角色ID",   `menu_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "菜单ID",   `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间",   PRIMARY KEY (`role_id`, `menu_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = "角色菜单表" ROW_FORMAT = Dynamic;
  用户角色表sys_user_role,一个用户拥有哪些角色 CREATE TABLE `sys_user_role`  (   `user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "用户ID",   `role_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "角色ID", 	`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间",   PRIMARY KEY (`user_id`, `role_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = "用户角色表" ROW_FORMAT = Dynamic;
  用户和角色是一对多的关系,角色和菜单也是一对多的关系
  3.2、创建实体和实现CRUD
  写这些类其实是一个重复的工作,把这个项目写完了,一定要做一个代码生成器,一个一个地敲太费时费力了!!
  4、测试验证4.1、初始化数据
  之前我们开启了权限验证,现在初始化数据的时候先关一下;只需要注释掉SpringSecurityConfigurer上的@EnableGlobalMethodSecurity(prePostEnabled = true)这个注即可。
  接口文档:从零开始手打一个权限管理系统
  初始化菜单数据
  取消注释,发送登录请求,可以发现权限信息已经全部写进去了,大家会发现新生成的token会比之前大很多,因为写入了权限信息,具体代码可看JWTUtil的createToken方法
  测试访问没有权限的主页
  测试有权限的用户新增
  看看能不能登录
  到这里,这个系统的基本功能大部分都完成了,接下来我将继续完善和优化细节!!!
  当前版本:1.0.4
  [代码仓库](https://gitee.com/ailot/study)三、 体验地址(http://test.ailot.vip)
  后台数据库只给了部分权限,报错属于正常!    想学的老铁给点点关注吧!!!    后期会开源前后端所有代码!!!
  我是阿咕噜,一个从互联网慢慢上岸的程序员,如果喜欢我的文章,记得帮忙点个赞哟,谢谢!

突发!中国斯诺克名将被迫退赛,世界台联宣布坏消息赵心童确诊2022年10月6日,斯诺克香港大师赛拉开序幕,三位中国选手赵心童傅家俊吴安仪受邀参赛,目前八位球员都抵达赛场,进行最后的冲刺,但是临时出现突发情况,赵心童没有通过检测,被迫退出比三镇海港输球,泰山直逼领头羊,上海申花恐成中超冠军最大黑马由于中超联赛支离破碎的赛程,往年接近尾声的中超如今刚刚过半,而争冠的归属也渐渐浮出水面!也许几个礼拜前要问中超冠军是谁,估计超过90的球迷已经认定是一骑绝尘的武汉三镇。可是足球就是摘银后即遭重创!曝女篮回国航班取消原因不明年初多数队员曾感染在今年初的世预赛后,也曝出中国女篮多数球员被核酸检测呈阳性,她们也在塞尔维亚多待了一段时间才回国。中国女篮在今年的世界杯上摘得银牌,平了历史最好成绩,是一件可喜可贺的事情,不曾想有伊藤美诚31大胜,日乒淘汰韩乒,女队主帅放话双核决战中国队10月6日,成都世乒赛团体赛淘汰赛继续进行,日本女队将在今天参加14决赛,她们的主帅渡边武弘放话,日本队将双核决战中国队。渡边怎么如此放话呢?在10月5日的比赛中,日本队伊藤美诚木意大利队获胜却收坏消息,中国女排占对优势,蔡斌有望冲击四强在今天凌晨结束的一轮E组的小组赛的比赛当中,中国队是迎来了自己在第二阶段小组赛的首场比赛,我们的对手是波多黎各队,双方在最近六次的交手过程当中,中国队是取得了六战全胜的战绩,尤其是拒绝姚明,告别中国男篮,王治郅新工作亮相,表示很满意王治郅是中国男篮的传奇球星,他的一举一动,也都在球迷的关注之中。八一男篮在2020年的时候,宣布不再参加CBA赛事,在那之后,王治郅也就很少亮相在媒体面前了。其实还是有许多俱乐部,女排世锦赛最新排名,巴西降至小组第五,中国升至第二北京时间10月6日凌晨,女排世锦赛第二阶段第二日的比赛结束,最新的小组排名也已经出炉。中国女排凭借30战胜波多黎各,小组排名升至第二位,而巴西队则降落到第五位。另外一个小组中,塞尔(体育)女排世锦赛综合美国爆冷不敌波兰意大利胜日本新华社荷兰鹿特丹10月5日电(记者刘旸肖亚卓)2022世界女排锦标赛5日进行第二阶段小组赛(16强)的7场比赛,东京奥运会冠军美国队以03爆冷负于世界排名第12位的东道主波兰队,意对喜欢的人不要以礼相待永远一本正经,那你们永远只能是朋友1对喜欢的人不要以礼相待。永远一本正经,那你们永远只能是朋友。你喜欢他的话,他甚至强吻你,你都不会真的生气,只是会觉得有点快。2当一个人跟你说只想搞钱的时候,基本可以确认他现在除了网游平民时代来了!大佬开服第一天秀100万充值记录,无一人捧场在以角色养成玩法为基础的MMORPG中,有很多神豪玩家,为了彰显自己的财力,追求最顶尖的战力,在花钱打造装备这方面,可以说是壕无人性!与神豪玩家相关的话题,也一直都是大量网友热议的新能源500强我国245家,宁德时代和协鑫排名前二本文数据来源标注在图表标题下方,图表和内容均为安安小小姐姐原创,并开启全网保护,转载引用请联系作者。2022年太原能源低碳论坛期间,中国能源经济研究院,发布了2022全球新能源企业
家有美多语音集成灶,厨房似乎都变得热闹了呢炎炎夏日,全国各地都将进入持续高温模式。这么热的天气,外面行人廖廖无几,家中的厨房却开始变得欢声笑语起来。让大家在炎热天气里喜悦的是什么呢是开着的空调?是一口冰镇西瓜?是陪在身边的手持类产品设计欣赏手持产品设计是在工业设计界比较常见的设计类别,而在生活工作中手持产品几乎随处可见,与手直接接触的产品在用户交互设计,触感,材质,工艺等方面,都是需要考虑到的。下面小编给大家分享几款新蕊云课堂躲不过的20个养育难题,一起来看解决办法让宝宝健康成长是每个家长的心愿,宝宝生病了如何护理?宝宝的生长发育是否正常?日常饮食如何安排,是否需要补充营养素?宝宝的常见病护理生长发育营养与喂养三大主题是03岁家长最关注的问题宝宝满6个月才能喝水?真相原来是这样,喝水还需要多变通才行很多宝妈都不知道怎么给宝宝喝水,给宝宝喝水其实也是一种学问。在什么样的情况需要喝水?怎么喝,喝多少?什么水不能喝?喝水,看起来是一件非常简单的小事,但很多人却依然搞不清楚。母乳喂养人到中年,独生子女跟多子女家庭,哪一种更幸福?答案让人意外导语对于年轻夫妻来说,生育一胎,还是多胎,是一个让人犹豫不决的选择。独生子女多好!父母养育不累,孩子独得父母的宠爱,也不用担心其他孩子来争宠。这是很多夫妻选择生一胎的原因,毕竟想要郑秀晶的新搭配看着真潮!上半身像上班,下半身像旅游时尚走向了多元化的阶段,复古风日系风街头风等等刮起了一股浪潮,受到了很多人的学习与模仿。拥有清冷美人称号的郑秀晶,在近段时间也带火了一种新的风格。单独看上半身给人一种职场女性的感觉夏天想要凹造型,一定少不了牛仔单品,休闲减龄,谁穿谁好看七八月的天气,正是酷暑难耐。而爱美的姑娘,依然是忘不了凹造型。除了各种漂亮的小裙子,迷人的小吊带,更惹眼的一定是牛仔单品了。夏天想要凹造型,一定少不了牛仔单品。不仅休闲减龄,还酷飒日本奶奶美一辈子的秘诀,在于不认老的心态,以及得体的打扮虽然随着时尚发展,越来越多人认识到穿衣打扮的重要性,但还是有很多人忽略了老年人的变美需求,甚至连不少老年人自己都放弃了追求时尚与美丽,甚至将老都老了,穿那么好看给谁看呢?挂在嘴边。中国广电5G手机篇OPPO手机如何设置,可以使用广电5G网络?导语截止7月15日,目前支持中国广电4G5G网络的手机有179款,今天给大家说说OPPO手机如何设置支持广电4G5G网络。一OPPO哪些手机型号支持广电4G5G网络?(1)从网站看全新外观设计荣耀X40i登场,荣耀X30超低价来袭,疯抢首当其冲以轻快薄一见倾心为产品主题,荣耀X40i带来了全新的外观设计,结合7。43mm超薄全视屏40W超级快充5000万超清影像和智慧运存扩展等特色亮点,荣耀X40i标配8128G存储,起以目前造新能源车的势头,你觉得下半年锂价格会跌吗?两年间,碳酸锂价格飞涨。从5。3万元吨已经涨至近47万元吨。是不是很吓人?锂产品的价格能否维持在当前价格是支撑锂行业估值的关键。由于锂产品的供应持续紧张,价格几乎不可能回落到过去的拒绝交易,留守勇士!金州不愿为杜兰特放弃你,夺冠让你找准定位随着勇士的夺冠,不管是像小佩顿波特卢尼这种处于核心轮换阵容中的球员,还是像别利察安德森李这种季后赛没有什么出场机会的球员,他们都遭到了市场的哄抢,绝大部分的价值都随着夺冠而提升了,手拿把攥的比赛输了!马龙王楚钦被横扫,韩国队新绝招确实够绝WTT球星赛如火如荼的进行中,在刚刚结束的男双比赛中,王楚钦与马龙的组合被逆转,其对手是来自于韩国的赵大成和李尚洙组合,这两人在男单方面世界前20左右徘徊,与马龙和王楚钦基本是不可巧合!广州队两旧将一进一出,韩国队调整阵容出战东亚杯下周,东亚杯就将在日本打响,这次比赛国足派出的是选拔队,除了谭龙与蒋光太之外,其它球员全是U23年龄段,练兵的目标非常明显。但是我们的对手并不是这样的计划,为了备战世界杯,日本与韩恭喜国乒!已经提前包揽女单冠亚军,日乒4大冠军全军覆没独家2021直通WTT大满贯世乒赛王艺迪王畅女子单打北京时间7月16日,WTT布达佩斯球星挑战赛进入到了单打半决赛的争夺。目前刚刚打完一场女单半决赛,另一场女单半决赛在明日凌晨进行要价2800万?开玩笑呢,FMVP别退役了事情大概是这样,近日,勇士老板拉科布做客了伊戈达拉埃文特纳主持的播客节目,节目里,拉科布问伊戈达拉你下赛季还会回到球队吗?伊戈达拉笑着反问你们想让我回来吗?话至此,特纳插话安德烈(田径世锦赛陆佳雯无缘女子跳高决赛原标题田径世锦赛陆佳雯无缘女子跳高决赛7月16日,中国选手陆佳雯在资格赛中。当日,在美国俄勒冈州尤金市举行的2022世界田径锦标赛女子跳高资格赛中,中国选手陆佳雯位列第28位,无缘都知道詹姆斯肌肉强悍,但在这5人面前他也得叫声哥锡安上榜詹姆斯的肌肉很强悍,这跟他自身体质有关,最主要还是后天的努力。他训练刻苦,饮食也很注意,因此,他的肌肉在同位置,真的算是天花板存在了。哪怕现在37岁,一身腱子肉还是惹眼,他的肌肉能6331!男篮亚洲杯惨案鱼腩队三场输了136分男篮亚洲杯小组赛继续进行,印度男篮对阵黎巴嫩男篮,最终,印度队6310441分惨败给了黎巴嫩队,第二节单节印度队更是931,又是一场惨案,印度队遭遇了3连败,这三场合计输了136分今夏T恤无痕裤突然火了,时髦显瘦,简直是梨形身材的福音热情洋溢的夏天,有清新西瓜的味道与热烈阳光相配,无限激发了我们对于穿搭的渴望。这一份专属于夏季穿搭的活力感,综合性性感与优雅,舒适又不缺少魅力的展现,绝对少不了t恤和无痕裤的搭配。澳洲出生证明能在国内上户口吗?澳洲出生证公证认证办理步骤喜事连连新生儿的诞生,意味着宝爸宝妈们多了一份责任,宝宝的出生是父母爱情的结晶,更是父母生命的延续。宝宝出生时,医院会出具一份医学出生证明,出生证明是一个人来到人世上的证明材料。孩今日入伏这4种高钾茶要常喝,清凉有营养,舒爽度苦夏转眼间七月已经过去一半,今天是入伏,今年的三伏天足足有四十天,一直到八月底是一年中最热的时候,在我国不少地区都在被烈日烘烤,有点的温度普遍在4042度之间,整天热的汗水直流,让人坐