相关的类:

通过代码生成器导入4个不同的表,并把下载中的public.key放入

依赖:

<dependencies><dependency><groupId>com.zb</groupId><artifactId>shop-goods-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1.tmp</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-oauth2</artifactId><exclusions><exclusion><groupId>org.springframework.security.oauth.boot</groupId><artifactId>spring-security-oauth2-autoconfigure</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.security.oauth.boot</groupId><artifactId>spring-security-oauth2-autoconfigure</artifactId><version>2.1.3.RELEASE</version></dependency></dependencies>

Application.yml:

server:port: 9030
spring:application:name: shop-goodscloud:nacos:discovery:server-addr: 127.0.0.1:8848datasource:url: jdbc:mysql://localhost:3306/shop_goods?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: 1002981655
mybatis-plus:mapper-locations: classpath:mapper/*.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplauto-mapping-behavior: FULL  #自动映射的配置 属性和数据库列相同不用配置resultglobal-config:      #逻辑删除的配置db-config:logic-delete-field: deletedlogic-delete-value: 1logic-not-delete-value: 0

ResourceServerConfig代码:

package com.zb.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.stream.Collectors;@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)//激活方法上的PreAuthorize注解
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {//公钥private static final String PUBLIC_KEY = "public.key";/**** 定义JwtTokenStore* @param jwtAccessTokenConverter* @return*/@Beanpublic TokenStore tokenStore(JwtAccessTokenConverter jwtAccessTokenConverter) {return new JwtTokenStore(jwtAccessTokenConverter);}/**** 定义JJwtAccessTokenConverter* @return*/@Beanpublic JwtAccessTokenConverter jwtAccessTokenConverter() {JwtAccessTokenConverter converter = new JwtAccessTokenConverter();converter.setVerifierKey(getPubKey());return converter;}/*** 获取非对称加密公钥 Key** @return 公钥 Key*/private String getPubKey() {Resource resource = new ClassPathResource(PUBLIC_KEY);try {InputStreamReader inputStreamReader = new InputStreamReader(resource.getInputStream());BufferedReader br = new BufferedReader(inputStreamReader);return br.lines().collect(Collectors.joining("\n"));} catch (IOException ioe) {return null;}}/**** Http安全配置,对每个到达系统的http请求链接进行校验* @param http* @throws Exception*/@Overridepublic void configure(HttpSecurity http) throws Exception {//所有请求必须认证通过http.authorizeRequests()//下边的路径放行.antMatchers("/tb-user-model/info/**"). //配置地址放行permitAll().anyRequest().authenticated();    //其他地址需要认证授权}
}

Swagger2代码:

页面版的postman

package com.zb.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;/*** @author zh* @ClassName cn.saytime.Swgger2* @Description* @date 2017-07-10 22:12:31*/
@Configuration
public class Swagger2 {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.zb.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("springboot利用swagger构建api文档").description("简单优雅的restfun风格,http://blog.csdn.net/saytime").termsOfServiceUrl("http://blog.csdn.net/saytime").version("1.0").build();}
}

TokenDecode代码:

package com.zb.config;import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.client.utils.StringUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.jwt.Jwt;
import org.springframework.security.jwt.JwtHelper;
import org.springframework.security.jwt.crypto.sign.RsaVerifier;
import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
import org.springframework.stereotype.Component;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.stream.Collectors;@Component
public class TokenDecode {//公钥private static final String PUBLIC_KEY = "public.key";private static String publickey = "";/*** 获取非对称加密公钥 Key** @return 公钥 Key*/public static String getPubKey() {if (!StringUtils.isEmpty(publickey)) {return publickey;}Resource resource = new ClassPathResource(PUBLIC_KEY);try {InputStreamReader inputStreamReader = new InputStreamReader(resource.getInputStream());BufferedReader br = new BufferedReader(inputStreamReader);publickey = br.lines().collect(Collectors.joining("\n"));return publickey;} catch (IOException ioe) {return null;}}/**** 读取令牌数据*/public static Map<String, String> dcodeToken(String token) {//校验JwtJwt jwt = JwtHelper.decodeAndVerify(token, new RsaVerifier(getPubKey()));//获取Jwt原始内容String claims = jwt.getClaims();return JSON.parseObject(claims, Map.class);}/**** 获取用户信息* @return*/public static Map<String, String> getUserInfo() {//获取授权信息OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) SecurityContextHolder.getContext().getAuthentication().getDetails();//令牌解码return dcodeToken(details.getTokenValue());}
}

控制器代码:

package com.zb.controller;import com.zb.dto.BrandDto;
import com.zb.dto.CategoryDto;
import com.zb.dto.SkuDto;
import com.zb.dto.SpuDto;
import com.zb.entity.TbBrandModel;
import com.zb.entity.TbCategoryModel;
import com.zb.entity.TbSkuModel;
import com.zb.entity.TbSpuModel;
import com.zb.service.TbBrandService;
import com.zb.service.TbCategoryService;
import com.zb.service.TbSkuService;
import com.zb.service.TbSpuService;
import io.swagger.annotations.Api;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.HashMap;
import java.util.Map;/*** @ClassName TbSkuController* @Description 商品表控制器* @Author zj* @Date 2023/03/27 19:56**/
@RestController
@RequestMapping("/tb-sku-model")
@Api(value = "TbSkuController", tags = {"商品表控制器"})
public class TbSkuController {@Autowiredpublic TbSkuService tbSkuModelService;@Autowiredpublic TbSpuService tbSpuService;@Autowiredpublic TbCategoryService tbCategoryService;@Autowiredpublic TbBrandService tbBrandService;@GetMapping("/info")public Map<String,Object> info(@RequestParam("skuId") String skuId){Map<String,Object> data = new HashMap<>();TbSkuModel tbSkuModel = tbSkuModelService.getById(skuId);TbSpuModel tbSpuModel = tbSpuService.getById(tbSkuModel.getSpuId());TbBrandModel tbBrandModel = tbBrandService.getById(tbSpuModel.getBrandId());TbCategoryModel c1 = tbCategoryService.getById(tbSpuModel.getCategory1Id());TbCategoryModel c2 = tbCategoryService.getById(tbSpuModel.getCategory2Id());TbCategoryModel c3 = tbCategoryService.getById(tbSpuModel.getCategory3Id());SkuDto skuDto = new SkuDto();SpuDto spuDto = new SpuDto();BrandDto brandDto = new BrandDto();CategoryDto cd1 = new CategoryDto();CategoryDto cd2 = new CategoryDto();CategoryDto cd3 = new CategoryDto();BeanUtils.copyProperties(tbSkuModel,skuDto);BeanUtils.copyProperties(tbSpuModel,spuDto);BeanUtils.copyProperties(tbBrandModel,brandDto);BeanUtils.copyProperties(c1,cd1);BeanUtils.copyProperties(c2,cd2);BeanUtils.copyProperties(c3,cd3);data.put("sku",skuDto);data.put("spu",spuDto);data.put("brand",brandDto);data.put("c1",cd1);data.put("c2",cd2);data.put("c3",cd3);return data;}
}

启动器代码:

package com.zb;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableSwagger2
public class GoodsApplication {public static void main(String[] args) {SpringApplication.run(GoodsApplication.class, args);}
}

商店项目-5.通过skuId来查询相关的sku,spu,brand,category相关推荐

  1. 《Kotlin从小白到大牛》第28章:项目实战1:开发PetStore宠物商店项目

    第28章 项目实战1:开发PetStore宠物商店项目 前面学习的Kotlin知识只有通过项目贯穿起来,才能将书本中知识变成自己的.通过项目实战读者能够了解软件开发流程,了解所学知识在实际项目中使用的 ...

  2. 计算机目录读取,从项目目录中读取SQL查询文件(Read SQL query file from project directory)...

    从项目目录中读取SQL查询文件(Read SQL query file from project directory) 我在Visual Studio项目中放置了3个特别大的SQL查询,位于项目目录中 ...

  3. 《Java从小白到大牛》第29章:项目实战1:开发PetStore宠物商店项目

    第29章 项目实战1:开发PetStore宠物商店项目 前面学习的Java知识只有通过项目贯穿起来,才能将书本中知识变成自己的.通过项目实战读者能够了解软件开发流程,了解所学知识在实际项目中使用的情况 ...

  4. 【项目精选】城市公交查询系统(论文+视频+源码)

    点击下载源码 1.1 选题背景 随着低碳生活的普及,人们更倾向于低碳环保的出行方式,完善公交系统无疑具有重要意义.公交是居民日常生活中最常使用的交通工具之一,伴随着我国经济繁荣和城市人口增长,出行工具 ...

  5. 宠物商店项目_充分利用宠物项目的7个技巧

    宠物商店项目 I've started so many side projects. Little or not so little, most of them were focused on one ...

  6. Elasticsearch查询相关总结以及timestamp和时区问题

    ES查询相关 参考:https://www.cnblogs.com/qdhxhz/p/11493677.html 如果想筛选出特定时间段的event,可以在查询语句里使用post_filter POS ...

  7. SQLServer子查询相关知识笔记

    今天给大家介绍以下SQLServer子查询相关知识,希望对大家能有所帮助! 1.子查询概念介绍 子查询可以嵌套在SELECT.INSERT.UPDATE.DELETE语句或其他子查询语句中的查询,子查 ...

  8. ArcGIS Engine开发之旅08--和查询相关的对象和接口

    ArcGIS Engine开发之旅08--和查询相关的对象和接口 原文:ArcGIS Engine开发之旅08--和查询相关的对象和接口 查询在GIS领域应该是一个很频繁的操作,在GIS中除了具有属性 ...

  9. GitHub项目:自然语言处理领域的相关干货整理

    GitHub项目:自然语言处理领域的相关干货整理 自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域.本文作者为NLP初学者整理了一份庞大的自然语言处 ...

最新文章

  1. 【Tools】cmake 常用变量和常用环境变量查表手册---整理
  2. cpu序列号唯一吗_手机CPU天梯图2020年1月最新版 你的手机处理器排名高吗?
  3. Infinite Tree
  4. Php官方指导安装与配置
  5. sqlserver中创建包含事务的存储过程
  6. osm数据下载 python_用Python解锁处理OSM数据的全部姿势
  7. mysql 杂记(一)
  8. 站点技术---301重定向
  9. paip.python 调用qt ui 总结
  10. SQL Server迁移数据库文件(ldfmdf文件)到其他盘
  11. VMware项目虚拟机IP修改说明
  12. 统计学软件 Stata 16
  13. 杭州电子科技大学第三届网络攻防大赛初赛题目
  14. 2021年实现团队成功的4步绩效管理周期
  15. Ubantu查看json文件
  16. 3D VReasy 易捷工业VR解决方案
  17. 错误代码: 1305 PROCEDURE world.insert_data does not exist
  18. 汽车销售数据相关性分析
  19. 应用程序正常初始化(0xc0150002)失败的终极解决方案
  20. 一节计算机课作文500,难忘的一堂课作文500字5篇

热门文章

  1. 解决ElementUI导航栏重复点菜单报错问题
  2. 华为鸿蒙速度对比,对比安卓!华为鸿蒙OS 2.0流畅度实测:差距肉眼可见
  3. idea注释模板设置(史上最全!!!)
  4. php中局部变量和全局变量
  5. Linux软防火墙ACL匹配的优化点
  6. [渝粤教育] 西南科技大学 国际经济法 在线考试复习资料(1)
  7. 学习记录(六)(每日修改)
  8. 从码农到工匠:优秀程序员的共同特质和素养
  9. Java覆盖率工具jacoco,Cobertura
  10. 多肽定制:钙调蛋白激酶底物,KKALHRQETVDAL