Spring Cloud Security&Eureka安全认证(Greenwich版本)

栏目: Java · 发布时间: 4年前

内容简介:Spring Cloud支持多种安全认证方式,比如OAuth等。而默认是可以直接添加直接配置明文敏感信息是比较冒险的,所以一种可行的办法就是将明文加密成密文。密文是以数据的加密解密可以通过接口

一·安全

Spring Cloud支持多种安全认证方式,比如OAuth等。而默认是可以直接添加 spring-boot-starter-security 来配置HTTP BASIC认证。如果没有配置用户和密码,那么默认的用户是user,并随机生成一个密码,在启动的控制台中显示出来。但是这种方式在实践中几乎无实际用途,所以最好还是需要显式设置(参数名为 spring.security.user.password )

二· 密码加密

直接配置明文敏感信息是比较冒险的,所以一种可行的办法就是将明文加密成密文。密文是以 {cipher} 开头,系统会自动在使用之前将其解密。如果配置的属性( keyname )对应密文无法解密,那么系统将会将此属性移除,并增加一个属性 invalid${keyname}: not applicable

数据的加密解密可以通过接口 /encrypt/decrypt 完成,比如:

$ curl localhost:8888/encrypt -d mysecret
682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda

$ curl localhost:8888/decrypt -d 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
mysecret

如果安装了扩展Spring Cloud CLI extensions,那么可以直接Spring命令工具:

$ spring encrypt mysecret --key foo
682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
$ spring decrypt --key foo 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
mysecret

也可以使用密钥文件加解密,文件路径参数前需要个特殊符号@,如下:

$ spring encrypt mysecret --key @${HOME}/.ssh/id_rsa.pub
AQAjPgt3eFZQXwt8tsHAVv/QHiY5sI2dRcR+...

注意:要使用加密解密的功能,必须要下载JCE(Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files)。这些默认是不包含在JDK中的。

三.Eureka Server配置HTTP BASIC

在配置文件中增加 spring-boot-starter-security ,如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

注意,在最新版本 Greenwich 中,口令不是配置 security.user.namesecurity.user.password 属性中,它已被废弃不推荐使用,而是配置在Spring中( spring.security.user.namespring.security.user.password )。以下的是Eureka多集群的( Greenwich )的配置文件:

USER: light
PASSWORD: 123456

spring:
  security:
    user:
      name: ${USER}
      password: ${PASSWORD}

eureka:
  client:
    service-url:
      defaultZone: http://${USER}:${PASSWORD}@peer1.com:9801/eureka/,http://${USER}:${PASSWORD}@peer2.com:9802/eureka/,http://${USER}:${PASSWORD}@peer3.com:9803/eureka/

---
spring:
  profiles: peer1
  application:
    name: application-peer1

server:
  port: 9801

eureka:
  environment: dev
  datacenter: hangzhou
  instance:
    hostname: peer1.com
    appname: lighthouse

---
spring:
  profiles: peer2
  application:
    name: application-peer2

server:
  port: 9802

eureka:
  environment: dev
  datacenter: beijing
  instance:
    hostname: peer2.com
    appname: lighthouse

---

spring:
  profiles: peer3
  application:
    name: application-peer3

server:
  port: 9803

eureka:
  environment: dev
  datacenter: guangzhou
  instance:
    hostname: peer3.com
    appname: lighthouse

由于默认是开启CSRF,所以需要将其关闭,不然会出现如下错误:

javax.ws.rs.WebApplicationException: com.fasterxml.jackson.databind.exc.MismatchedInputException: Root name 'timestamp' does not match expected ('instance') for type [simple type, class com.netflix.appinfo.InstanceInfo]

创建一个 WebSecurityConfig 类,代码如下:

// WebSecurityConfig.java

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable(); //关闭csrf
        super.configure(http); //开启认证
    }
}

启动三个配置文件对应的三个实例,就可以看到已经启用HTTP BASIC认证:

Spring Cloud Security&Eureka安全认证(Greenwich版本) Spring Cloud Security&Eureka安全认证(Greenwich版本)

关于Eureka Server集群的配置,请参考另外一篇文章

Spring Cloud Eureka集群配置及注意事项(Greenwich版本)

Eureka Client和Service Provider配置方法类似,只需要在defaultZone中配置好含有认证信息的url即可,如下所示。

“`

USER: light

PASSWORD: 123456

eureka:

client:

service-url:

defaultZone: http://${USER}:${PASSWORD}@peer1.com:9801/eureka/,http://${USER}:${PASSWORD}@peer2.com:9802/eureka/,http://${USER}:${PASSWORD}@peer3.com:9803/eureka/

“`

四·参考


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程语言实现模式

编程语言实现模式

Terence Parr / 李袁奎、尧飘海 / 华中科技大学出版社 / 2012-3-20 / 72.00元

《编程语言实现模式》旨在传授开发语言应用(工具)的经验和理念,帮助读者构建自己的语言应用。这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理、分析、翻译输入文件的程序,比如配置文件读取器、数据读取器、模型驱动的代码生成器、源码到源码的翻译器、源码分析工具、解释器,以及诸如此类的工具。为此,作者举例讲解已有语言应用的工作机制,拆解、归纳出31种易于理解且常用的设计模式(每种都包括通......一起来看看 《编程语言实现模式》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具