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

开网站需要准备什么关键词排名查询api

开网站需要准备什么,关键词排名查询api,已矣seo排名点击软件,建设科技网络网站的意义和目的手机端查看 docker 容器#xff0c;镜像操作命令 1、docker删除所有镜像命令 删除所有镜像的命令是Docker中一个非常常见的操作。下面是具体的实现步骤和命令示例#xff1a; $ docker stop $(docker ps -aq) 停止所有正在运行的容器。 $ docker rm $(docker ps -aq) 删… 手机端查看 docker 容器镜像操作命令 1、docker删除所有镜像命令 删除所有镜像的命令是Docker中一个非常常见的操作。下面是具体的实现步骤和命令示例 $ docker stop $(docker ps -aq) 停止所有正在运行的容器。 $ docker rm $(docker ps -aq) 删除所有容器。 $ docker rmi $(docker images -aq) 删除所有镜像。这里的 docker ps -aq 和 docker images -aq 是一系列用于查找和选择容器和镜像的 Docker 命令。 2. docker删除镜像文件 如果使用 docker rmi 命令时突然出现“permission denied” 的提示这应该就是因为 Docker 的镜像文件很可能在使用中。这时候为了彻底删除这些文件我们可以采取以下步骤 $ docker ps -a $ docker stop containerID 或 containerNAME $ docker rm containerID 或 containerNAME $ docker rmi imageName3. docker删除镜像 有些时候你可能需要单独删除某几个镜像或者特定名称、标签或ID的所有镜像。以下是实现的具体命令 1. 根据名称来删除某个镜像。 $ docker rmi imageName2. 根据标签来删除某些镜像。 $ docker rmi imageName:tag3. 根据 ID 来删除某个镜像。 $ docker rmi imageID4. docker删除镜像后如何还原 如果误删了某些关键镜像想要将其还原则可以使用以下命令在 Docker 中重新安装您需要的镜像 $ docker pull imageName 如果该镜像包含某些特定的标签则可以通过添加该标签名称来重新安装该镜像 $ docker pull imageName:tag小小细节区分StringUtils.isNotBlank()StringUtils.isBlank()StringUtils.isEmpty()StringUtils.isNotEmpty() 判断str字符串都不为空StringUtils.isNotBlank(String str);对于制表符、换行符、换页符和回车符StringUtils.isBlank()均识为空白符* StringUtils.isNotBlank(null) false* StringUtils.isNotBlank() false* StringUtils.isNotBlank( ) false* StringUtils.isNotBlank(bob) true* StringUtils.isNotBlank( bob ) true* 判断字符串是否只等于null或空()StringUtils.isEmpty(String str);判断为空都返回true StringUtils.isBlank(String str);检查如果一个字符串是否全为空格,空()或null只有null和空()会返回false StringUtils.isNotEmpty(String str)检查一个字符串不为空()与不为null一般用isNotBlank()这个非空判读比较多点,因为这个较为完整,各种意义上的空都屏蔽掉了 微服务的一般结构 ①接口定义RestControllerRequestMapping(/api/v1/login)public class ApUserLoginController {PostMapping(/login_auth)public ResponseResult login(RequestBody LoginDto dto) {return null;}}②持久层mapperpackage com.heima.user.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.heima.model.user.pojos.ApUser;import org.apache.ibatis.annotations.Mapper;Mapperpublic interface ApUserMapper extends BaseMapperApUser {}③业务层servicepackage com.heima.user.service;import com.baomidou.mybatisplus.extension.service.IService;import com.heima.model.common.dtos.ResponseResult;import com.heima.model.user.dtos.LoginDto;import com.heima.model.user.pojos.ApUser;public interface ApUserService extends IServiceApUser{/*** app端登录* param dto* return*/public ResponseResult login(LoginDto dto);}④实现类package com.heima.user.service.impl;import com.baomidou.mybatisplus.core.toolkit.Wrappers;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.heima.model.common.dtos.ResponseResult;import com.heima.model.common.enums.AppHttpCodeEnum;import com.heima.model.user.dtos.LoginDto;import com.heima.model.user.pojos.ApUser;import com.heima.user.mapper.ApUserMapper;import com.heima.user.service.ApUserService;import com.heima.utils.common.AppJwtUtil;import org.apache.commons.lang3.StringUtils;import org.springframework.stereotype.Service;import org.springframework.util.DigestUtils;import java.util.HashMap;import java.util.Map;Servicepublic class ApUserServiceImpl extends ServiceImplApUserMapper, ApUser implements ApUserService {Overridepublic ResponseResult login(LoginDto dto) {return null;}} 一. nacos 1. docker下载安装 nacos安装①docker拉取镜像 docker pull nacos/nacos-server:1.2.0②创建容器docker run --env MODEstandalone --name nacos --restartalways -d -p 8848:8848 nacos/nacos-server:1.2.0- MODEstandalone 单机版 - --restartalways 开机启动 - -p 8848:8848 映射端口 - -d 创建一个守护式容器在后台运行③访问地址http://192.168.200.130:8848/nacos 2. 微服务导入nacos注册服务发现和配置管理 dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId/dependency3. 引导上加注解EnableDiscoveryClient开启服务注册 SpringBootApplication EnableDiscoveryClient MapperScan(com.heima.user.mapper) public class UserApplication {public static void main(String[] args) {SpringApplication.run(UserApplication.class,args);} }4. 在nacos配置中心撰写配置文件 注意mysql版本在8.0以及之上的需要注意driver-class-name: com.mysql.cj.jdbc.Driverpassword需要根据需求进行变化url也需要根据需求变化当用的非本地的mysql时需要更改localhost为虚拟机地址 spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/leadnews_user?useUnicodetruecharacterEncodingUTF-8serverTimezoneUTCusername: rootpassword: root # 设置Mapper接口所对应的XML文件位置如果你在Mapper接口中有自定义方法需要进行该配置 mybatis-plus:mapper-locations: classpath*:mapper/*.xml# 设置别名包扫描路径通过该属性可以给包中的类注册别名type-aliases-package: com.heima.model.user.pojos5. bootstrap.yml进行配置 基本上每个微服务都需要在bootstrap.yml中引入这个 server:port: 51801 spring:application:name: leadnews-usercloud:nacos:discovery: //nacos服务注册server-addr: 192.168.200.130:8848config: //nacos配置的发现server-addr: 192.168.200.130:8848file-extension: yml6. logback.xml配置 !--定义日志文件的存储地址,使用绝对路径-- property nameLOG_HOME valuee:/logs/这个可以根据需要自己更改 ?xml version1.0 encodingUTF-8?configuration!--定义日志文件的存储地址,使用绝对路径--property nameLOG_HOME valuee:/logs/!-- Console 输出设置 --appender nameCONSOLE classch.qos.logback.core.ConsoleAppenderencoder!--格式化输出%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符--pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/patterncharsetutf8/charset/encoder/appender!-- 按照每天生成日志文件 --appender nameFILE classch.qos.logback.core.rolling.RollingFileAppenderrollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!--日志文件输出的文件名--fileNamePattern${LOG_HOME}/leadnews.%d{yyyy-MM-dd}.log/fileNamePattern/rollingPolicyencoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern/encoder/appender!-- 异步输出 --appender nameASYNC classch.qos.logback.classic.AsyncAppender!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --discardingThreshold0/discardingThreshold!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --queueSize512/queueSize!-- 添加附加的appender,最多只能添加一个 --appender-ref refFILE//appenderlogger nameorg.apache.ibatis.cache.decorators.LoggingCache levelDEBUG additivityfalseappender-ref refCONSOLE//loggerlogger nameorg.springframework.boot leveldebug/root levelinfo!--appender-ref refASYNC/--appender-ref refFILE/appender-ref refCONSOLE//root /configuration二. Swagger和knife4j 像Swagger和knife4j这种每个微服务都需要的就写在common模块中直接让所有微服务的父亲去引用即可 dependencygroupIdcom.heima/groupIdartifactIdheima-leadnews-common/artifactId/dependency1 swagger (1) SpringBoot集成Swagger 引入依赖,在heima-leadnews-model和heima-leadnews-common模块中引入该依赖 dependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger2/artifactId /dependency dependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger-ui/artifactId /dependency只需要在heima-leadnews-common中进行配置即可因为其他微服务工程都直接或间接依赖即可。 在heima-leadnews-common工程中添加一个配置类 新增com.heima.common.swagger.SwaggerConfiguration Configuration EnableSwagger2 public class SwaggerConfiguration {Beanpublic Docket buildDocket() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(buildApiInfo()).select()// 要扫描的API(Controller)基础包.apis(RequestHandlerSelectors.basePackage(com.heima)).paths(PathSelectors.any()).build();}private ApiInfo buildApiInfo() {Contact contact new Contact(黑马程序员,,);return new ApiInfoBuilder().title(黑马头条-平台管理API文档).description(黑马头条后台api).contact(contact).version(1.0.0).build();} }在heima-leadnews-common模块中的resources目录中新增以下目录和文件 文件resources/META-INF/Spring.factories org.springframework.boot.autoconfigure.EnableAutoConfiguration\com.heima.common.swagger.SwaggerConfiguration2Swagger常用注解 在Java类中添加Swagger的注解即可生成Swagger接口文档常用Swagger注解如下 Api修饰整个类描述Controller的作用 ApiOperation描述一个类的一个方法或者说一个接口 ApiParam单个参数的描述信息 ApiModel用对象来接收参数 ApiModelProperty用对象接收参数时描述对象的一个字段 ApiResponseHTTP响应其中1个描述 ApiResponsesHTTP响应整体描述 ApiIgnore使用该注解忽略这个API ApiError 发生错误返回的信息 ApiImplicitParam一个请求参数 ApiImplicitParams多个请求参数的描述信息 ApiImplicitParam属性 我们在ApUserLoginController中添加Swagger注解代码如下所示 RestControllerRequestMapping(/api/v1/login)Api(value app端用户登录, tags ap_user, description app端用户登录API)public class ApUserLoginController {Autowiredprivate ApUserService apUserService;PostMapping(/login_auth)ApiOperation(用户登录)public ResponseResult login(RequestBody LoginDto dto){return apUserService.login(dto);}}LoginDto Data public class LoginDto {/*** 手机号*/ApiModelProperty(value 手机号,required true)private String phone;/*** 密码*/ApiModelProperty(value 密码,required true)private String password; }启动user微服务访问地址http://localhost:51801/swagger-ui.html 2 knife4j (1)简介 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍! (2)核心功能 该UI增强包主要包括两大核心功能文档说明 和 在线调试 文档说明根据Swagger的规范说明详细列出接口文档的说明包括接口地址、类型、请求示例、请求参数、响应示例、响应参数、响应码等信息使用swagger-bootstrap-ui能根据该文档说明对该接口的使用情况一目了然。在线调试提供在线接口联调的强大功能自动解析当前接口参数,同时包含表单验证调用参数可返回接口响应内容、headers、Curl请求命令实例、响应时间、响应状态码等信息帮助开发者在线调试而不必通过其他测试工具测试接口是否正确,简介、强大。个性化配置通过个性化ui配置项可自定义UI的相关显示信息离线文档根据标准规范生成的在线markdown离线文档开发者可以进行拷贝生成markdown接口文档通过其他第三方markdown转换工具转换成html或pdf这样也可以放弃swagger2markdown组件接口排序自1.8.5后ui支持了接口排序功能例如一个注册功能主要包含了多个步骤,可以根据swagger-bootstrap-ui提供的接口排序规则实现接口的排序step化接口操作方便其他开发者进行接口对接 (3)快速集成 在heima-leadnews-common模块中的pom.xml文件中引入knife4j的依赖,如下 dependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-spring-boot-starter/artifactId /dependency创建Swagger配置文件 在heima-leadnews-common模块中新建配置类 新建Swagger的配置文件SwaggerConfiguration.java文件,创建springfox提供的Docket分组对象,代码如下 Configuration EnableSwagger2 EnableKnife4j Import(BeanValidatorPluginsConfiguration.class) public class Swagger2Configuration {Bean(value defaultApi2)public Docket defaultApi2() {Docket docketnew Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())//分组名称.groupName(1.0).select()//这里指定Controller扫描包路径.apis(RequestHandlerSelectors.basePackage(com.heima)).paths(PathSelectors.any()).build();return docket;}private ApiInfo apiInfo() {return new ApiInfoBuilder().title(黑马头条API文档).description(黑马头条API文档).version(1.0).build();} }org.springframework.boot.autoconfigure.EnableAutoConfiguration\com.heima.common.swagger.Swagger2Configuration(4) 以上有两个注解需要特别说明如下表 注解说明EnableSwagger2该注解是Springfox-swagger框架提供的使用Swagger注解该注解必须加EnableKnife4j该注解是knife4j提供的增强注解,Ui提供了例如动态参数、参数过滤、接口排序等增强功能,如果你想使用这些增强功能就必须加该注解否则可以不用加 添加配置 在Spring.factories中新增配置 org.springframework.boot.autoconfigure.EnableAutoConfiguration\com.heima.common.swagger.Swagger2Configuration, \com.heima.common.swagger.SwaggerConfiguration访问 在浏览器输入地址http://host:port/doc.html 三. gateway 详细的gateway学习链接 网关gateway也是一个微服务 1在heima-leadnews-gateway导入以下依赖 pom文件 dependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId/dependencydependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactId/dependency /dependencies其中jjwt是用于进行实现JWT(Json Web Token)是实现token技术的一种解决方案用于前端和服务端进行身份认证本文只是基于如何快速创建秘钥和解析秘钥至于后端使用过滤器校验逻辑可自行补充。 dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactId/dependency2在heima-leadnews-gateway下创建heima-leadnews-app-gateway微服务 引导类 package com.heima.app.gateway;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;SpringBootApplication EnableDiscoveryClient //开启注册中心 public class AppGatewayApplication {public static void main(String[] args) {SpringApplication.run(AppGatewayApplication.class,args);} }bootstrap.yml server:port: 51601 spring:application:name: leadnews-app-gatewaycloud:nacos:discovery:server-addr: 192.168.200.130:8848config:server-addr: 192.168.200.130:8848file-extension: yml在nacos的配置中心创建dataid为leadnews-app-gateway的yml配置 spring:cloud:gateway:globalcors:add-to-simple-url-handler-mapping: truecorsConfigurations:[/**]:allowedHeaders: *allowedOrigins: *allowedMethods:- GET- POST- DELETE- PUT- OPTIONroutes:# 平台管理- id: useruri: lb://leadnews-userpredicates:- Path/user/**filters:- StripPrefix 11. 配置全局过滤器 Component Slf4j public class AuthorizeFilter implements Ordered, GlobalFilter {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {//1.获取request和response对象ServerHttpRequest request exchange.getRequest();ServerHttpResponse response exchange.getResponse();//2.判断是否是登录if(request.getURI().getPath().contains(/login)){//放行return chain.filter(exchange);}//3.获取tokenString token request.getHeaders().getFirst(token);//4.判断token是否存在if(StringUtils.isBlank(token)){response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();}//5.判断token是否有效try {Claims claimsBody AppJwtUtil.getClaimsBody(token);//是否是过期int result AppJwtUtil.verifyToken(claimsBody);if(result 1 || result 2){response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();}}catch (Exception e){e.printStackTrace();response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();}//6.放行return chain.filter(exchange);}/*** 优先级设置 值越小 优先级越高* return*/Overridepublic int getOrder() {return 0;} }2. JWT鉴权 首先在gateway中导入以下依赖 dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactId/dependency其中jjwt是用于进行实现JWT(Json Web Token)是实现token技术的一种解决方案用于前端和服务端进行身份认证本文只是基于如何快速创建秘钥和解析秘钥至于后端使用过滤器校验逻辑可自行补充。 然后写JWT鉴权的方法 public class AppJwtUtil {// TOKEN的有效期一天Sprivate static final int TOKEN_TIME_OUT 3_600;// 加密KEYprivate static final String TOKEN_ENCRY_KEY MDk4ZjZiY2Q0NjIxZDM3M2NhZGU0ZTgzMjYyN2I0ZjY;// 最小刷新间隔(S)private static final int REFRESH_TIME 300;// 生产IDpublic static String getToken(Long id){MapString, Object claimMaps new HashMap();claimMaps.put(id,id);long currentTime System.currentTimeMillis();return Jwts.builder().setId(UUID.randomUUID().toString()).setIssuedAt(new Date(currentTime)) //签发时间.setSubject(system) //说明.setIssuer(heima) //签发者信息.setAudience(app) //接收用户.compressWith(CompressionCodecs.GZIP) //数据压缩方式.signWith(SignatureAlgorithm.HS512, generalKey()) //加密方式.setExpiration(new Date(currentTime TOKEN_TIME_OUT * 1000)) //过期时间戳.addClaims(claimMaps) //cla信息.compact();}/*** 获取token中的claims信息** param token* return*/private static JwsClaims getJws(String token) {return Jwts.parser().setSigningKey(generalKey()).parseClaimsJws(token);}/*** 获取payload body信息** param token* return*/public static Claims getClaimsBody(String token) {try {return getJws(token).getBody();}catch (ExpiredJwtException e){return null;}}/*** 获取hearder body信息** param token* return*/public static JwsHeader getHeaderBody(String token) {return getJws(token).getHeader();}/*** 是否过期** param claims* return -1有效0有效1过期2过期*/public static int verifyToken(Claims claims) {if(claimsnull){return 1;}try {claims.getExpiration().before(new Date());// 需要自动刷新TOKENif((claims.getExpiration().getTime()-System.currentTimeMillis())REFRESH_TIME*1000){return -1;}else {return 0;}} catch (ExpiredJwtException ex) {return 1;}catch (Exception e){return 2;}}/*** 由字符串生成加密key** return*/public static SecretKey generalKey() {byte[] encodedKey Base64.getEncoder().encode(TOKEN_ENCRY_KEY.getBytes());SecretKey key new SecretKeySpec(encodedKey, 0, encodedKey.length, AES);return key;}public static void main(String[] args) {/* Map map new HashMap();map.put(id,11);*/System.out.println(AppJwtUtil.getToken(1102L));JwsClaims jws AppJwtUtil.getJws(eyJhbGciOiJIUzUxMiIsInppcCI6IkdaSVAifQ.H4sIAAAAAAAAADWLQQqEMAwA_5KzhURNt_qb1KZYQSi0wi6Lf9942NsMw3zh6AVW2DYmDGl2WabkZgreCaM6VXzhFBfJMcMARTqsxIG9Z888QLui3e3Tup5Pb81013KKmVzJTGo11nf9n8v4nMUaEY73DzTabjmDAAAA.4SuqQ42IGqCgBai6qd4RaVpVxTlZIWC826QA9kLvt9d-yVUw82gU47HDaSfOzgAcloZedYNNpUcd18Ne8vvjQA);Claims claims jws.getBody();System.out.println(claims.get(id));} }
http://www.tj-hxxt.cn/news/136418.html

相关文章:

  • 泰州网站制作软件网站没有备案怎么做支付
  • 开封景区网站建设方案wordpress主题二级菜单栏
  • 定做专业营销型网站浏览器在线进入
  • 苍溪网站建设制作如何在网站搜关键字
  • 国外大型门户网站大学生创新创业网站建设申报书
  • 免费网站空间10g电子商务之网站建设
  • 奉贤做网站公司什么浏览器可以看违规网站
  • 农业科技公司网站建设网站英文域名怎么查
  • 如何增加网站反链网页设计师资格证查询官网
  • 电子商务网站需要做那些准备工作主流网站宽度
  • 企业网站建设规划书ppt经典重庆网首页
  • 重庆做网站制作的公司做p2p网站的公司
  • 网站建设流程有视频网站用户增长怎么做
  • 佛山市制作网站网页界面设计ppt(完美版)百度文库
  • c苏宁网站开发商业模式包括哪些模式
  • 网站建设视频上传网站开发者不给源代码怎么办
  • 网站建设团队扬州珠海建网站的网络公司
  • 鸿邑网站建设仿制网站侵权吗
  • 手机微信小程序怎么制作佛山选择免费网站优化
  • 做设计的网站有哪些手机家装绘图软件
  • 做外贸搜索外国客户的网站淘宝网站SEO怎么做
  • 加强公司网站建设及数据库的通知代理网络怎么关闭
  • 新浪网站源代码网站后台管理图片
  • pc网站建设和推广简单的网站怎样做
  • 备份wordpress网站品牌网络推广方式
  • 做网站创业风险分析网站ping值
  • thinkphp怎么做网站cms开源建站系统
  • 上海市建设工程材料网站黄金网站软件入口免费
  • 广东圆心科技网站开发建站教程详解cms 导航网站
  • 建网站都用什么字体连云港市连云区建设局网站