小编Meo*_*ode的帖子

使用双向SSL Handake设置Netty(客户端和服务器证书)

我现在正尝试使用双向SSL握手设置Netty,其中客户端和服务器都提供并验证证书.

这似乎没有在SslHandler中实现.有没有人这样做?我想它会进入SslHandler.handshake操作并被委托给javax.net.ssl.SSLEngine?

任何提示/提示/预先存在的实现?

谢谢!


ANSWER(stackoverflow不会让我以正常的方式发布它)我发现如果我在设置我的SslHandler之前在SSLEngine对象上设置了needClientAuth标志,那就解决了这个问题!

java ssl netty handshake

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

带有自定义settings.xml的Jenkins声明管道

我正在尝试用maven 建立一个Jenkins 声明管道.到目前为止,我可以让maven运行,但我无法使用我定义的Maven Settings.xml.

pipeline{
   agent any
   tools{
       maven 'Apache Maven 3.3'
       // without mavenSettingsConfig, my settings.xml is not used.  With it, this blows up
       mavenSettingsConfig: 'Global Maven Settings'
       jdk 'jdk9
   }
   stages {
       stage('Preparation'){
           steps{
              //code checkout stuff here--this works fine
           }
       }
       stage('Build'){
            steps{
               sh "mvn clean install -P foo"
            }
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

问题似乎是mavenSettingsConfig.没有该属性,我无法弄清楚如何设置settings.xml,我的自定义maven东西不起作用.(例如,配置文件foo.)使用mavenSettingsConfig,它会爆炸:

BUG!源单元'WorkflowScript'中的'规范化'阶段中的异常意外NullpointerException ....

文档中有一个很大的TODO,它将为此提供一个示例!那我该怎么做?

(文档TODO在https://wiki.jenkins.io/display/JENKINS/Pipeline+Maven+Plugin.它实际上说"TODO提供了Jenkins声明管道的样本")

maven jenkins jenkins-pipeline

9
推荐指数
2
解决办法
8381
查看次数

Jersey InputStream在过滤器中进行了修改.无法弄清楚如何在Jersey Resource中访问修改后的inputStream

正如在如何使用Jersey拦截器来获取请求主体中所讨论的那样,我正在修改ContainerRequestFilter中的EntityInputStream.

public filter(ContainerRequest request){
     ByteArrayOutputStream out = new ByteArrayOutputStream();
     InputStream in = request.getEntityInputStream(); 
     try{
           Readerwriter.writeTo(in, out);
           byte[] requestEntity = out.toByteArray();

           // DO SOMETHING WITH BYTES HERE

           request.setEntityInputStream(new ByteArrayInputStream(requestEntity));

      }/// error handling code here  
}
Run Code Online (Sandbox Code Playgroud)

但是,后来我无法弄清楚如何访问修改后的InputStream.我可以在资源中获取ServletContext,但我无法弄清楚如何获取我在过滤器中实际修改的对象ContainerRequest.

我可以这样做吗?当我尝试这个时,泽西岛无法启动:

@Post
@Path("/test")
public Response test(@Context ContainerRequest cr){
     // blah blah
     return....
}
Run Code Online (Sandbox Code Playgroud)

泽西岛错误:

方法public javax.ws.rs.core.Response example.TestController.test(com.sun.jersey.spi.container.ContainerRequest)缺少依赖性,用资源的POST注释,类example.TestController,不被认为是有效的资源方法.

我被困在一个旧版本的球衣,1.8,所以我不确定这是否是问题的一部分.

java rest web-services jersey

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

如何在Netty Handler中获取客户端证书以识别用户?

我使用双向SSL成功运行Netty(请参阅使用双向SSL保护设置Netty(客户端和服务器证书)).

但是,在我的一些处理程序中,我需要知道正在使用该应用程序的用户.我发现我无法弄清楚如何在我的处理程序中获取用户证书DN等信息.

我认为它可以在某个地方的ChannelHandlerContext中使用,但事实并非如此.有什么建议?

我知道SSLEngine可以在某个地方访问它,但我没有看到任何关于在SSLEngine公共API中获取访问权限的信息.我知道它在握手操作中有访问权限....但是我如何得到它?

ssl certificate netty

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

如何处理Spring WebClient获取应用程序/八位字节流作为主体输入流?

我正在使用 GET 请求下载文件。其中一些非常大,所以我想将它们作为流获取,并在我可以处理它们时分块读取字节,而不是读取内存中的整个文件。

org.springframework.web.reactive.function.client.WebClient 似乎很合适,但我遇到了“UnsupportedMediaTypeException:不支持内容类型‘application/octet-stream’。

这是一些简短的示例代码。

@Autowired WebClient.Builder webClientBuilder;
....
ClientResponse clientResponse = webClientBuilder.clientConnector(this.connector)
.build()
.get()
.uri(uri)
.accept(MediaType.APPLICATION_OCTET_STREAM)
.exhange()
.block(Duration.of(1, ChronoUnit.MINUTES));

// blows up here, inside of the body call
InputStream responseInputStream = clientResponse.body(BodyExtractors.toMono(InputStream.class)).block(Duration.of(1, ChronoUnit.MINUTES));
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪的一部分。

org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'application/octet-stream' not supported
   at org.springframework.web.reactive.function.BodyExtractors.lambda$readWithMessageReaders$20(BodyExtractors.java:254)
   at java.util.Optional.orElseGet(Optional.java:267)
   at org.springframework.web.reactive.function.BodyExtractors.readWithMessageReaders(BodyExtractors.java:250)
   at org.springframework.web.reactive.function.BodyExtractors.lambda$toMono$2(BodyExtractors.java:92)
Run Code Online (Sandbox Code Playgroud)

......

我使用的是 spring-webflux 5.0.7。

我确信 spring webclient 必须支持 JSON 之外的东西。我只是不知道该怎么做。帮助?

spring spring-webflux

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

Java并发:如何在处理过程中告诉哪个Future属于哪个Callable?

我有一组Callables和一个ExecutorService.当我调用所有时,我得到一个Future对象列表.如何在Future完成之前判断哪个Future对象映射到哪个Callable?我事后可以告诉因为

码:

 ExecutorService es = .....;

 Collection<Callables> uniqueCallables = .....;  // each Callable is unique!

 List<Future> futures = es.invokeAll(uniqueCallables);

 // TODO--find unique Future A which is the future for Callable A!
Run Code Online (Sandbox Code Playgroud)

java concurrency future callable executorservice

5
推荐指数
1
解决办法
1458
查看次数

将Guice与Jersey(squarespace)集成:未安装ServiceLocatorGenerator

我正在部署一个Jersey 2.22应用程序,我试图使用Squarespace jersey2-guice-impl库顺利地与Guice 4.0集成,以便我可以轻松地将Guice依赖项注入我的控制器.

(我为下面的小错字道歉,我不得不重新输入所有内容.)

但是我在启动时遇到以下错误,这是由我的WebListener引起的:

   SEVERE: Exception starting filter jersey
   java.lang.IllegalStateException: It appears there is no ServiceLocatorGenerator installed.  
     at com.squarespace.jersey2.guice.GuiceServiceLocatorGeneratorStub.create(GuiceServiceLocatortGeneratorStub.java:50)
     at org.glassifsh.hk3.internal.ServiceLocatorFactoryImpl.internalCreate(ServiceLocatorFactoryImpl.java:312)
     at org.glassfish.h2k.internal.ServiceLocatorFactoryimpl.create(ServiceLocatorFactoryImpl.java: 268)
     at org.glassfish.jersey.internal.inject.Injections._createLocator(Injections.java:138)
     at org.glassfish.internal.inject.Injections.createLocator(Injections.java:123)
     at org.glassfish.jersey.server.ApplicationHandler.<init>(WebComponent.java:392)
     at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177)
     at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer:415)
     at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
     at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java: 262)
     at ....
Run Code Online (Sandbox Code Playgroud)

我从我的pom.xml使用以下依赖项:

 <dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guice</artifactId>
    <version>4.0.0</version>
 </dependency>
 <dependency>
    <groupId>com.google.inject.extensions</groupId>
    <artifactId>guice-servlet</artifactId>
    <version>4.0.0</version>
 </dependency>
 <dependency>
    <groupId>com.squarespace.jersey2-guice</groupId>
    <artifactId>jersey2-guice-impl</artifactId>
    <version>1.0.6</version>
 </dependency>
 <dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.22.2</version>
 </dependency>
 <dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.22.2</version>
 </dependency>
 <dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.22.2</version>
 </dependency>
 <dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-mvc</artifactId>
    <version>2.22.1</version>
 </dependency>
Run Code Online (Sandbox Code Playgroud)

这是WebListener: …

tomcat jersey guice squarespace guice-servlet

5
推荐指数
0
解决办法
601
查看次数

我可以将流或字节写入 Apache Commons 压缩 Tarfile 吗?

Apache Commons 压缩库似乎专注于将 TarArchiveEntry 写入 TarArchiveOutputStream。但看起来创建 TarArchiveEntry 的唯一方法是使用 File 对象。

我没有要写入 Tar 的文件,内存中有 byte[] 或最好有流。我不想将一堆临时文件写入磁盘只是为了构建 tar.gz 文件。

有什么办法我可以做这样的事情:

TarEntry entry = new TarEntry(int size, String filename);
entry.write(byte[] fileContents);
TarArchiveOutputStream tarOut = new TarArchiveOutputStream();
tarOut.write(entry);
tarOut.flush();
tarOut.close();
Run Code Online (Sandbox Code Playgroud)

或者,甚至更好......

InputStream nioTarContentsInputStream = .....
TarEntry entry = new TarEntry(int size, String filename);
entry.write(nioTarContentsInputStream);
TarArchiveOutputStream tarOut = new TarArchiveOutputStream();
tarOut.write(entry);
tarOut.flush();
tarOut.close();
Run Code Online (Sandbox Code Playgroud)

compression apache file tar apache-commons

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

将OWL架构加载到像Fuskei/TDB这样的三重存储中?

我有一个漂亮的OWL架构,我写了,我想实际加载到一个三元组,然后添加数据,以便我可以查询它.但我对如何做到这一点有点无能为力.

你看,我有Fuseki/TDB,完全是因为Jena带来了它们,我喜欢Jena API.但我不知道如何将这个架构实际放入三元店.是否有人像传统数据库一样加载模式?我不知道.

我有Fuseki/TDB运行,并按照"入门"教程,但该教程处理将数据加载到默认图表,我不知道如何进一步移动.救命?线索?我应该使用不同的三重店设置和实际详细的操作方法文档吗?

rdf semantic-web owl jena triplestore

0
推荐指数
1
解决办法
483
查看次数