0%

加密解密

在项目中有些敏感的配置属性,如数据库用户名、密码等,都应该进行加密存储

需要下载jdk的JCE,下载之后放到JAVA_HOME下的lib中

对称加密

1
2
3
4
spring:
datasource:
username: root
password: '{cipher}851a6effab6619f43135a714061f4602be0251b73b56b0451a7e268c880daea3'

加解密端点

  • 加密: curl $CONFIG_URL/encrypt-d想要加密的内容
  • 解密: curl $CONFIG_URL/decrypt-d 想要解密的密文
阅读全文 »

网关简介

为什么要有网关,这个不好解释,那就说说如果没有网关会有哪些问题吧

对于微服务来说,会有很多的应用服务

  • 客户端请求不同的微服务,这些增加了客户端的复杂性
  • 如果微服务进行重新划分了,那么客户端如何进行通信
  • 认证相当复杂,每个服务都需要独立认证
  • 在进行防火墙开通时,所有的微服务要给所有的客户端开通白名单,很复杂

网关呢,就可以解决上述的问题

  • 网关可以来实现安全认证,防止很多恶意访问
  • 网关可以进行限流熔断,防止请求过多导致服务不可用
  • 网关可以进行日志监控,所有的外部请求都会经过网关,可以来记录日志信息
  • 网关可以实现灰度发布,让一部分人继续使用原功能,另一部分人使用新功能

Feign与Hystrix

Feign默认已经整合了hystrix,只是默认是没有启用的,需要进行配置

1
2
3
feign:
hystrix:
enabled: true

可以看到如果配置了feign.hystrix.enabled会使用HystrixFeign.builder()来构建Feign,将具体的调用包裹在HystrixCommand 中

1
2
3
4
5
6
7
8
9
10
11
12
13
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ HystrixCommand.class, HystrixFeign.class })
protected static class HystrixFeignConfiguration {

@Bean
@Scope("prototype")
@ConditionalOnMissingBean
@ConditionalOnProperty(name = "feign.hystrix.enabled")
public Feign.Builder feignHystrixBuilder() {
return HystrixFeign.builder();
}

}

和 Feign 使用的时候需要注意错误处理的问题。对于一些非功能性的业务错误,需要包装为 HystrixBadRequestException,让 Hystrix 不要统计到错误中造成断路

虽然开启了hystrix,但是其默认不带有监控端点,如果想要使用监控端点,需要加依赖

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

然后启动类上增加@EnableCircuitBreaker注解,并开启端点

1
2
3
4
5
management:
endpoints:
web:
exposure:
include: 'hystrix.stream'

自动登录SSH

每次ssh连接服务器还要输入密码,可以进行配置自动登录SSH

步骤

  • 在SSH的client端产生一组公钥和私钥

    1
    2
    # 算法可以使用RSA和DSA两种
    ssh-keygen -f 秘钥文件名 -t 使用的算法

    会生成私钥文件id_rsa以及公钥文件id_rsa.pub

  • 把公钥上传至SSH Server端的.ssh目录下的authorized_keys中,私钥则留在client

maven代理

有时候公司使用的是内网,无法直接访问Maven中央仓库或者maven的镜像仓库,需要在settings.xml中设置代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<proxies>
<proxy>
<!-- 代理名称,随便起 -->
<id>optional</id>
<!-- 是否激活该代理 -->
<active>true</active>
<!-- 代理协议 -->
<protocol>http</protocol>
<!-- 代理需要认证时使用的用户名和密码 -->
<username>proxyuser</username>
<password>proxypass</password>
<!-- 代理的主机和端口 -->
<host>proxy.host.net</host>
<port>80</port>
<!-- 哪些地址访问不需要代理,使用|分隔 --><nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>

</proxies>