fabric-sdk-java+springboot实现invoke,query,enroll等示例(3)

一,简介

这里介绍一下fabric-sdk-java的使用,网络环境是基于fabric1.4.0的。当然在低版本的fabric网络中也是适用的。只是在第二部分,启动 修改fabric网络为不启用TLS 部分, 启动网络环境的方式不太相同。高版本(1.4.3及以后)的需要修改一些东西, 例如将后面配置文件中的admincerts改成signcerts,为了保证顺利启动,建议还是直接启动1.4.0网络为好,

首先确保你已经能够自己搭建其一个可用的fabric网络。(如果您还没有把fabric基本网络搭建成功,请移步fabric网络环境搭建)不过我们需要一个关闭了TLS的网络,

首先我们需要启动一个关闭TLS的fabric网络。网络需要两个组织,四个节点和两个CA。就是fabric为我们提供好的e2e网络。

二,修改fabric网络为不启用TLS

进入first-network文件夹,(这里建议你将first-network复制一份,并且重命名为2first-network,避免你以后需要启用TLS的时候还得再改。),打开byfn.sh ,修改COMPOSE_FILE=docker-compose-cli.yamlCOMPOSE_FILE=docker-compose-e2e.yaml。这样在启动的时候,就会为我们启动e2e的网络。(你可能会发现当前目录中并没有docker-compose-e2e.yaml这个文件,别担心,脚本会自动为我们生成的)不过光改这个还不够。还需要把TLS关掉。

  1. 打开docker-compose-e2e-template.yaml把 *_TLS_ENABLED=true,前面加个# 注释掉或是把true改成false。注意*是匹配任意字符。就是把你找到的含有TLS_ENABLED的都改了
  2. 进入base文件夹,把该文件夹里面的两个文件进行1中的操作。
  3. e2e 网络是没有cli客户端的, 这样不方便我们手动控制合约的部署,实例化等操作,如果你想要启动一个,可以在docker-compose-e2e-template.yaml最下面加入下面内容 , (拷自docker-compose-cli.yaml)文件(粘贴时请注意yaml文件的缩进)
  cli:
    container_name: cli
    image: hyperledger/fabric-tools:$IMAGE_TAG
    tty: true
    stdin_open: true
    environment:
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      #- FABRIC_LOGGING_SPEC=DEBUG
      - FABRIC_LOGGING_SPEC=INFO
      - CORE_PEER_ID=cli
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
      - CORE_PEER_LOCALMSPID=Org1MSP
      #- CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash
    volumes:
        - /var/run/:/host/var/run/
        - ./../chaincode/:/opt/gopath/src/github.com/chaincode
        - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
        - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
        - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
    depends_on:
      - orderer.example.com
      - peer0.org1.example.com
      - peer1.org1.example.com
      - peer0.org2.example.com
      - peer1.org2.example.com
    networks:
      - byfn

执行脚本,启动网络。

如果你的网络启动成功,恭喜你,你已经完成了教程的四分之一。

三,构建spring boot项目(由于springboot版本更新, 无法按照教程正常执行, 建议可以直接创建一个普通gradle项目,转到分割线处继续执行就好)

进入快速构建spring boot网页 spring boot

按照图片从上到下点击,最后genetate project。会下载一个压缩包到你的本地。解压到你的workspace。(请问workspace是哪里?---就是你的Java工作空间。)

等等,为什么要选择这么老的版本?其实选择springboot2也可以的, 就是springboot2跟fabric-java-sdk1.0.0不兼容,会照成版本冲突,博主亲自测试过,fabric-sdk-java采用1.4.0的情况下,springboot需要用2.1.12会兼容(好像是这个版本号,记不太清了),其他的都不行,你可以手动修改测试一下。

在你的工具(idea或是eclipse)中打开项目,需要等待几分钟,等项目构建完毕。

-------------------------------------------------------分割线-----------------------------------------------------------

项目构建完成后,引入一下fabric-sdk-java依赖,在builde.gradle中加入

compile('org.hyperledger.fabric-sdk-java:fabric-sdk-java:1.0.0')

加入完成后,

eclipse中:右键build.gradle >> Gradle  >>> refresh gradle project 。导入相关的依赖包。

idea中的操作方法就不赘述了,自己研究一下,都差不多的。

完成后复制以下代码到项目的main/java文件夹下面,就是红色圈住的部分。

代码在

链接:https://pan.baidu.com/s/1lDz01GEcK7DbPqPK-G4XYA 
提取码:99pi 

复制完成后项目的目录是

然后在first-network目录中找到生成的crypto-config文件夹。并考到你本地的项目所盘的data目录中。我项目在E盘, 所以放再E盘的data目录

打开Config.java,,修改相关的配置为正确的值,其中所有的grpcs要改为grpc。还有baseUrl改成自己的, 然后打开QueryChaincode.java。修改chaincode的名字以及引用的参数。执行main方法。

如果顺利的话,就可以执行成功了,如果有报错,有可能是你的证书文件路径放错了,或是Config.java 里面的配置文件有问题。

然后打开InvokeChaincode.java。适当修改其中参数。执行main方法。。。。祝你好运!另外在network目录下,有创建通道和部署链代码的简单示例,而user目录下面有注册用户的简单示例,可以自行测试一下,不过如果你测试channel的创建的话,还需要把channel-artifacts文件夹也拷贝到data文件夹下面,而智能合约的部署需要配置一下智能合约的路径,这个都不太复杂,自己探索一下就好了。

友情提示: 上传的demo有错误的地方, 需要把util.java里的ECDSA替换成EC, 在第136行 , 这个不会影响教程的正常执行, 但是在测试创建channel时会有影响 ,  十分抱歉 .

其实按照目前所提到的,不用spring boot也可以,你直接建立一个普通的gradle项目,按照步骤执行也是可以的,那么为什么还要用spring boot呢? 答案就是为了起一个web服务,好在web服务中来操作。至于这个就不一步一步的教了。直接把我的demo上传了,需要可以下载。下载示例

作为一个良心的博主,我并不想坑大家这么多积分,无奈优快云不能自己设置积分, 如果有想要又买不起积分的童鞋,可以再下方评论,

不过。。。。。。

代价就是。。。。

请顺手点个赞吧。

### 解决Content Security Policy (CSP) img-src &#39;self&#39; data: base64 错误 当遇到 `img-src` CSP 指令违反策略的问题时,通常是由于网页尝试加载不符合指定来源的图像资源引起的。以下是可能的原因以及解决方案: #### 原因分析 1. **CSP 策略定义不足** 当前 CSP 中设置了 `img-src &#39;self&#39;`,这意味着只有来自同一源(即当前域名)的图片才能被加载。如果页面中有通过 `data:` 或者其他外部 URL 加载的图片,则会被阻止[^1]。 2. **Base64 图像嵌入问题** 使用 Base64 编码的内联图像是一种常见的优化手段,但如果未显式允许 `data:` 协议,在 CSP 下这些图像将无法正常显示。 3. **动态生成的内容冲突** 动态注入 HTML 内容可能导致意外行为,尤其是当内容中包含不受信任的数据时,这可能会触发 CSP 警告或错误。 --- #### 解决方案 ##### 方法一:扩展 `img-src` 定义范围 修改 `<meta>` 标签中的 CSP 策略以支持更多类型的图像来源。例如: ```html <meta http-equiv="Content-Security-Policy" content="default-src &#39;self&#39;; script-src &#39;self&#39;; img-src &#39;self&#39; data:;"> ``` 上述配置表示除了允许同源的图片外,还允许基于 Base64 的编码图像加载。 ##### 方法二:调整服务器端响应头 如果 CSP 是由 HTTP 头部设置而非 `<meta>` 标签控制,则需更新 Web 服务器配置文件。对于 Nginx 和 Apache 分别有以下示例- **Nginx** ```nginx add_header Content-Security-Policy "default-src &#39;self&#39;; script-src &#39;self&#39;; img-src &#39;self&#39; data;"; ``` - **Apache** ```apache Header set Content-Security-Policy "default-src &#39;self&#39;; script-src &#39;self&#39;; img-src &#39;self&#39; data;" ``` 以上更改确保浏览器能够识别并接受 Base64 数据作为合法的图像来源[^1]。 ##### 方法三:移除违规代码片段 检查前端代码是否存在非法调用第三方资源的情况。比如某些框架库自动插入了跨域请求或者使用了未经许可的协议加载媒体资产。清理掉不必要的部分有助于减少潜在风险。 ##### 方法四:启用报告机制捕获异常事件 为了更好地监控实际运行状况,建议开启 CSP Reports 功能收集反馈日志以便后续改进措施制定。 ```html <meta http-equiv="Content-Security-Policy" content="... report-uri /csp-report-endpoint"> ``` 此操作会把每次发生的违禁访问记录提交至指定 URI 地址供管理员审查处理。 --- ### 示例代码展示 下面给出一段简单的 PHP 页面演示如何正确应用增强后的 CSP 设置防止类似问题再次发生。 ```php <?php header(&#39;Content-Security-Policy: default-src \&#39;self\&#39;; script-src \&#39;self\&#39;; img-src \&#39;self\&#39; data:&#39;); ?> <!DOCTYPE html> <html lang="en"> <head> <title>CSP Example</title> </head> <body> <!-- 合法本地图片 --> <img src="/images/example.jpg"> <!-- 合法base64编码图片 --> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..." alt="Embedded Image"> <h1>Secure Page Loaded Successfully!</h1> </body> </html> ``` ---
评论 174
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值