我现在正尝试使用双向SSL握手设置Netty,其中客户端和服务器都提供并验证证书.
这似乎没有在SslHandler中实现.有没有人这样做?我想它会进入SslHandler.handshake操作并被委托给javax.net.ssl.SSLEngine?
任何提示/提示/预先存在的实现?
谢谢!
ANSWER(stackoverflow不会让我以正常的方式发布它)我发现如果我在设置我的SslHandler之前在SSLEngine对象上设置了needClientAuth标志,那就解决了这个问题!
我正在尝试用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声明管道的样本")
正如在如何使用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,所以我不确定这是否是问题的一部分.
我使用双向SSL成功运行Netty(请参阅使用双向SSL保护设置Netty(客户端和服务器证书)).
但是,在我的一些处理程序中,我需要知道正在使用该应用程序的用户.我发现我无法弄清楚如何在我的处理程序中获取用户证书DN等信息.
我认为它可以在某个地方的ChannelHandlerContext中使用,但事实并非如此.有什么建议?
我知道SSLEngine可以在某个地方访问它,但我没有看到任何关于在SSLEngine公共API中获取访问权限的信息.我知道它在握手操作中有访问权限....但是我如何得到它?
我正在使用 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 之外的东西。我只是不知道该怎么做。帮助?
我有一组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) 我正在部署一个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: …
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) 我有一个漂亮的OWL架构,我写了,我想实际加载到一个三元组,然后添加数据,以便我可以查询它.但我对如何做到这一点有点无能为力.
你看,我有Fuseki/TDB,完全是因为Jena带来了它们,我喜欢Jena API.但我不知道如何将这个架构实际放入三元店.是否有人像传统数据库一样加载模式?我不知道.
我有Fuseki/TDB运行,并按照"入门"教程,但该教程处理将数据加载到默认图表,我不知道如何进一步移动.救命?线索?我应该使用不同的三重店设置和实际详细的操作方法文档吗?
java ×3
jersey ×2
netty ×2
ssl ×2
apache ×1
callable ×1
certificate ×1
compression ×1
concurrency ×1
file ×1
future ×1
guice ×1
handshake ×1
jena ×1
jenkins ×1
maven ×1
owl ×1
rdf ×1
rest ×1
semantic-web ×1
spring ×1
squarespace ×1
tar ×1
tomcat ×1
triplestore ×1
web-services ×1