几天来我一直在试图解决这个问题。加密方法工作正常,但在解密测试期间我收到以下异常。特别是我正在使用:AES/GCM/NoPadding. 据我所知T_LEN应该是IV_LENGTH*8字节数组表示。该错误真正显示在ExampleCryptografer.java解密方法中: byte[] decryptedText = cipher.doFinal(decoded);
javax.crypto.AEADBadTagException: Tag mismatch!
at java.base/com.sun.crypto.provider.GaloisCounterMode.decryptFinal(GaloisCounterMode.java:623)
at java.base/com.sun.crypto.provider.CipherCore.finalNoPadding(CipherCore.java:1116)
at java.base/com.sun.crypto.provider.CipherCore.fillOutputBuffer(CipherCore.java:1053)
at java.base/com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:853)
at java.base/com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2202)
at com.example.ExampleCryptografer.decrypt(ExampleCryptografer.java:61)
at com.example.ExampleCryptograferTest.decrypt_givenEncryptedExample_ShouldSucceed(ExampleCryptograferTest.java:21)
Run Code Online (Sandbox Code Playgroud)
这就是我的测试的样子:
public class ExampleCryptographerTest {
private ExampleCryptographer objectUnderTest = new ExampleCryptographer("knownKeyForTest=");
@Test
public void decrypt_givenEncryptedExample_ShouldSucceed() {
String example = "afasfdafafa=";
String encodedExample = objectUnderTest.encrypt(example);
String result = objectUnderTest.decrypt(encodedExample);
assertThat(result).isNotNull();
assertThat(result.length()).isEqualTo(48);
}
@Test
public void encrypt_givenExample_ShouldSucceed() {
String example = "afasfdafafa=";
String result = objectUnderTest.encrypt(example);
assertThat(result).isNotNull();
assertThat(result.length()).isEqualTo(48);
}
@Test
public …Run Code Online (Sandbox Code Playgroud) 我已经设置了我的docker repo,下面是docker-compose.yml文件:
version: '2'
networks:
prodnetwork:
driver: bridge
services:
nexus:
image: sonatype/nexus3
volumes:
- "nexus-data:/nexus-data"
ports:
- "8081:8081"
- "8082:8082"
- "8083:8083"
- "8084:8084"
- "8085:8085"
- "8086:8086"
- "8087:8087"
- "8088:8088"
networks:
- prodnetwork
jenkins:
image: library/jenkins
ports:
- "8080:8080"
networks:
- prodnetwork
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /opt/jenkins/:/var/lib/jenkins/
depends_on:
- nexus
- sonar
environment:
- NEXUS_PORT=8081
- SONAR_PORT=9000
- SONAR_DB_PORT=5432
sonar:
build: ./sonar
ports:
- "9000:9000"
- "5432:5432"
networks:
- prodnetwork
depends_on:
- sonardb
environment: …Run Code Online (Sandbox Code Playgroud) 我有mockMVC的问题和用它编写的测试.我的测试失败了.我有两种测试方法:
@Test
public void getPersonsForApiConsumerTest() throws Exception {
mockMvc.perform(get(getUri("/consumers/1/persons")))
.andExpect(status().isOk())
.andExpect(jsonPath("$", hasSize(2)))
.andExpect(jsonPath("$[1].name", is("Ligza")))
.andExpect(jsonPath("$[2].name", is("Vekrir")));
}
@Test
public void getPersonsForApiConsumerMapTest() throws Exception {
mockMvc.perform(get(getUri("/consumers/1/persons/map")))
.andExpect(status().isOk())
.andExpect(jsonPath("$[1].name", is("Verkir")))
.andExpect(jsonPath("$[2].name", is("Ligza")));
}
Run Code Online (Sandbox Code Playgroud)
具有映射的Rest方法:
@RequestMapping(value = "/{consumerId}/persons")
public List<PersonDto> getPersonsForApiConsumer(@PathVariable("consumerId") Integer consumerId) throws IOException {
return apiConsumerService.getPersonsListForApiConsumer(consumerId);
}
@RequestMapping(value = "/{consumerId}/persons/map")
public Map<ApiConsumerPersonRole, List<Person>> getPersonsForApiConsumerMap(@PathVariable("consumerId") Integer consumerId) throws IOException {
return apiConsumerService.getPersonsMapForApiConsumer(consumerId);
}
Run Code Online (Sandbox Code Playgroud)
通过Postman我可以获得这样的数据:
列表:
[
{
"id": 1,
"firstName": "Ligza",
"lastName": "Zetasor",
"role": "REPRESENTATIVE",
"phone": "123123123",
"email": "ligza.zetasor@gmail.com"
},
{
"id": …Run Code Online (Sandbox Code Playgroud) 我看到这个问题在Google或Stack上非常奇怪。让我解释。
我的界面方法的注释中有结果图。仅在这种特殊情况下,我才需要动态查询,这就是我决定在xml文件中为接口编写整个映射器的原因。下面,我粘贴整个文件。选择查询应该可以,但是我遇到了一些困难<resultMap>。
在不同的Web站点上,我一直在寻找关于此结果图的一对一,一对多,多对一关联和构造的良好解释。
我看到有某种可能性将其分成子查询,子结果映射。但是我已经使用myBatis注释完成了此操作,并且我想使用它。您能指导我,应该如何构造resultMap?我看不到需要构造函数,区分<collection>符,但它仍在大喊……(这就是为什么我加了标记)-IntelliJ强调了整个<resultMap>说法:"The content of element type "resultMap" must match "(constructor?,id*,result*,association*,collection*,discriminator?)"
我知道这似乎很明显,但是我完全不知道如何正确地做。请帮我。
xml映射器文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="pl.net.manager.dao.UsageCounterDAO">
<select id="getUsageCounterList" resultType="pl.net.manager.domain.UsageCounter"
resultMap="getUsageCounterListMap">
SELECT * FROM usage_counter WHERE
<if test="apiConsumerIdsList != null">
api_consumer IN
<foreach item="item" index="index" collection="apiConsumerIdsList"
open="(" separator="," close=")">
#{item}
</foreach>
AND
</if>
<if test="serviceConsumerIdsList != null">
service IN
<foreach item="item" index="index" collection="serviceConsumerIdsList"
open="(" separator="," close=")">
#{item}
</foreach>
AND
</if>
<if test="dateFrom != …Run Code Online (Sandbox Code Playgroud) 我FUNCTION在xml文件中有这样的:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
<changeSet id="1.0-procedures" author="api-manager">
<sql>
DROP FUNCTION IF EXISTS proc_api_consumer_audit_insert;
</sql>
<createProcedure>
CREATE FUNCTION proc_api_consumer_audit_insert()
RETURNS TRIGGER AS $api_consumer_audit$
BEGIN
INSERT INTO api_consumer_audit(LOREM_IPSUM) VALUES(LOREM_IPSUM);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
</createProcedure>
<rollback>
DROP FUNCTION IF EXISTS proc_api_consumer_audit_insert;
</rollback>
</changeSet>
</databaseChangeLog>
Run Code Online (Sandbox Code Playgroud)
更新期间的 liquibase 显示以下错误:
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.5.3:update (default-cli) on project api-manager: Error setting up or running Liquibase: Migration failed for change set db/dev/changelog/1.0/1.0-procedures.xml::1.0-procedures::api-manager:
[ERROR] Reason: …Run Code Online (Sandbox Code Playgroud) java ×3
aes-gcm ×1
associations ×1
centos ×1
docker ×1
dynamicquery ×1
encryption ×1
function ×1
junit ×1
liquibase ×1
mockmvc ×1
mybatis ×1
nexus3 ×1
postgresql ×1
spring ×1
testing ×1
xmlmapper ×1