小编kpe*_*hev的帖子

PBE AES_256加密在java 8 u65和u71之间不兼容

我有一些文本加密并存储在数据库中使用PBE AES_256.这最初是使用java完成的1.8.0_65.升级到最新的java后,我无法解密这些字段.我已经确定了与之不兼容的问题1.8.0_71.发行说明声明如下:

使用AES加密校正的PBE算法的问题使用256位AES密码对PBE纠正了错误,使得导出的密钥可能不同,并且不等同于先前从相同密码导出的密钥.JDK-8138589(非公开)

因此,我假设我需要"手动"迁移这些字段值,方法是使用旧版本进行解密,存储普通值,然后使用当前版本重新加密.有没有更好的方法来做到这一点,或者我可能遗漏了一些关于这种不兼容性的东西?

以下是用于加密的代码的一部分:

 SecretKey keyFromPassword =
        SecretKeyFactory.getInstance(
            algorithm).generateSecret(
            new PBEKeySpec(password.toCharArray()));

 Cipher cipher = Cipher.getInstance(algorithm);
 cipher.init(Cipher.ENCRYPT_MODE, keyFromPassword, new PBEParameterSpec(
        salt, iterations, new IvParameterSpec(iv)));
 IOUtils.copyLarge(new CipherInputStream(clearStream, cipher), encryptedStream);
Run Code Online (Sandbox Code Playgroud)

解决方案 我能够通过在我的密码上做一些反射魔法并重新初始化来解密现有值.如果有人有兴趣,这是代码:

Object spi = ReflectionTestUtils.getField(cipher, "spi");
ReflectionTestUtils.setField(spi, "keyLength", 128);
cipher.init(Cipher.DECRYPT_MODE, keyFromPassword, new PBEParameterSpec(
        salt, iterations, new IvParameterSpec(iv)));
Run Code Online (Sandbox Code Playgroud)

java encryption aes

11
推荐指数
1
解决办法
231
查看次数

带有参数化版本的maven发布插件

是否可以将maven发布插件与多模块项目一起使用,其中一些模块间依赖项是使用父pom中的参数指定的?

当我尝试调用release:prepare我收到以下错误:

[错误]未能执行目标org.apache.maven.plugins:行家释放小插件:2.1:准备(默认CLI)项目森林父母:版本无法更新:$ {some.version} - > [帮助1]

这是我的插件定义:

<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <goals>deploy</goals>
                <tagBase>https://svn.domain.com/svn/project/tags</tagBase>
                <autoVersionSubmodules>true</autoVersionSubmodules>
                <tagNameFormat>@{project.version}</tagNameFormat>
            </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

提前致谢!

version parameterized maven-3 maven maven-release-plugin

8
推荐指数
1
解决办法
4554
查看次数

@Cacheable打破了DependencyInjection

我偶然发现了一个案例,其中使用@Cacheable创建的AOP代理在Spring 3.1.1中打破了依赖注入.这是我的场景:

我有一个接口和一个在实现的方法中使用@Cacheable实现此接口的类.

示例界面:

public interface ImgService {
    public byte[] getImage(String name);
}
Run Code Online (Sandbox Code Playgroud)

示例实现:

public class ImgServiceImpl implements ImgService {

    @Cacheable(cacheName = "someCache")
    public byte[] getImage(String name){//TODO};

    protected String someOtherMethod(){//};
}
Run Code Online (Sandbox Code Playgroud)

我还需要JUnit测试类 - 一个注入接口,另一个注入实现:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:META-INF/spring.xml" })
public class ImgServiceTest {

    @Inject
    private ImgService;
}
Run Code Online (Sandbox Code Playgroud)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:META-INF/spring.xml" })
public class ImgServiceImplTest {

    @Inject
    private ImgServiceImpl;
}
Run Code Online (Sandbox Code Playgroud)

接口的依赖注入工作正常.但是,当我在第二个测试类中注入实现时,我得到"注入自动连接的依赖项失败".我能够调试它,看起来ClassUtils.isAssignableValue()错误地将所需类型与代理类进行比较.它由DefaultListableBeanFactory调用.更奇怪的是,如果我从已实现的方法中删除@Cacheable注释并将其添加到其他一些受保护/私有方法,依赖注入再次正常工作.这是一个错误,处理这种情况的正确方法是什么?

java spring annotations dependency-injection proxy-classes

6
推荐指数
2
解决办法
1769
查看次数

Spring执行器http.server.requests统计数据的单位是什么

我已经使用 实现了服务spring-boot-starter-2.0.0.RELEASE。我已经为其启用了执行器指标,但是我无法理解指标以什么单位表示。具体来说,我对http.server.requests.

端点的输出示例为:

{
    "name": "http.server.requests",
    "measurements": [
        {
            "statistic": "COUNT",
            "value": 2
        },
        {
            "statistic": "TOTAL_TIME",
            "value": 0.049653001
        },
        {
            "statistic": "MAX",
            "value": 0.040696019
        }
    ],
    "availableTags": [
        {
            "tag": "exception",
            "values": [
                "None"
            ]
        },
        {
            "tag": "method",
            "values": [
                "GET"
            ]
        },
        {
            "tag": "status",
            "values": [
                "200"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

spring metrics spring-boot spring-boot-actuator

6
推荐指数
1
解决办法
3559
查看次数

Spring Batch 4.2.4:无法反序列化执行上下文

我正在使用spring-batch:4.2.2.RELEASE作为spring-boot-starter-batch:2.2.4.RELEASE. 将后者升级到 version 后2.3.1.RELEASE,开始工作时出现以下异常:

java.lang.IllegalArgumentException: Unable to deserialize the execution context
    at org.springframework.batch.core.repository.dao.JdbcExecutionContextDao$ExecutionContextRowMapper.mapRow(JdbcExecutionContextDao.java:328)
    at org.springframework.batch.core.repository.dao.JdbcExecutionContextDao$ExecutionContextRowMapper.mapRow(JdbcExecutionContextDao.java:312)
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:94)
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:61)
    at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:679)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:617)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:669)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:700)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:712)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:768)
    at org.springframework.batch.core.repository.dao.JdbcExecutionContextDao.getExecutionContext(JdbcExecutionContextDao.java:129)
    at org.springframework.batch.core.explore.support.SimpleJobExplorer.getStepExecutionDependencies(SimpleJobExplorer.java:238)
    at org.springframework.batch.core.explore.support.SimpleJobExplorer.getJobExecutions(SimpleJobExplorer.java:87)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration$PassthruAdvice.invoke(SimpleBatchConfiguration.java:127)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
    at com.sun.proxy.$Proxy145.getJobExecutions(Unknown Source)
...
Caused by: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Missing type id when trying to resolve subtype of …
Run Code Online (Sandbox Code Playgroud)

java spring spring-batch kotlin spring-boot

4
推荐指数
1
解决办法
3760
查看次数

如何测试Spring HandlerInterceptor Mapping

我正在实现一个HandlerInterceptor需要在处理多个路径的请求之前/之后执行业务逻辑.我想通过模拟请求句柄生命周期来测试Interceptor的执行.

以下是拦截器的注册方式:

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/test*"/>
        <bean class="x.y.z.TestInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>
Run Code Online (Sandbox Code Playgroud)

我不仅要测试preHandlepostHandle方法,还要测试到路径的映射.

mapping junit spring-mvc spring-test interceptor

3
推荐指数
2
解决办法
1万
查看次数