Configuring the Jetty Container as a Https Connector

Jetty版本:9.2.22.v20170606

Pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>learnJetty</groupId>

<artifactId>learnJetty</artifactId>

<version>1.0-SNAPSHOT</version>

<dependencies>

<dependency>

<groupId>org.eclipse.jetty.aggregate</groupId>

<artifactId>jetty-all</artifactId>

<version>9.2.22.v20170606</version>

</dependency>

<!--生成json串-->

<dependency>

<groupId>com.fasterxml.jackson.module</groupId>

<artifactId>jackson-module-scala_2.10</artifactId>

<version>2.4.4</version>

</dependency>

</dependencies>

<build>

<finalName>JettyHttps</finalName>

<plugins>

<!--用来生成keystore-->

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>keytool-maven-plugin</artifactId>

<version>1.5</version>

<executions>

<execution>

<phase>generate-resources</phase>

<id>clean</id>

<goals>

<goal>clean</goal>

</goals>

</execution>

<execution>

<phase>generate-resources</phase>

<id>genkey</id>

<goals>

<goal>generateKeyPair</goal>

</goals>

</execution>

</executions>

<configuration>

<keystore>${project.build.directory}/jetty-ssl.keystore</keystore>

<dname>cn=127.0.0.1</dname><!-- put your CN here -->

<keypass>dypBdX1NB3gXA0DXCy9nfyJ4jqUDlaydgbo9OU12g</keypass>

<storepass>dypBdX1NB3gXA0DXCy9nfyJ4jqUDlaydgbo9OU12g</storepass>

<alias>jetty</alias>

<keyalg>RSA</keyalg>

</configuration>

</plugin>

</plugins>

</build>

</project>

说明:keytool-maven-plugin是用来生成jetty-ssl.keystore,默认生成在target目录下。

jetty-https.xml

<?xml version="1.0"?>

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

<Configure id="Server" class="org.eclipse.jetty.server.Server">

<Call id="httpsConnector" name="addConnector">

<Arg>

<New class="org.eclipse.jetty.server.ServerConnector">

<Arg name="server"><Ref refid="Server" /></Arg>

<Arg name="factories">

<Array type="org.eclipse.jetty.server.ConnectionFactory">

<Item>

<New class="org.eclipse.jetty.server.SslConnectionFactory">

<Arg>

<New class="org.eclipse.jetty.util.ssl.SslContextFactory">

<Set name="KeyStorePath">\云化转型\myScalaTest3\jetty-ssl.keystore</Set>

<Set name="TrustStorePath">\云化转型\myScalaTest3\jetty-ssl.keystore</Set>

<Set name="KeyStorePassword"><Property name="jetty.keystore.password" default="dypBdX1NB3gXA0DXCy9nfyJ4jqUDlaydgbo9OU12g"/></Set>

<Set name="KeyManagerPassword"><Property name="jetty.keymanager.password" default="dypBdX1NB3gXA0DXCy9nfyJ4jqUDlaydgbo9OU12g"/></Set>

<Set name="TrustStorePassword"><Property name="jetty.truststore.password" default="dypBdX1NB3gXA0DXCy9nfyJ4jqUDlaydgbo9OU12g"/></Set>

<Set name="EndpointIdentificationAlgorithm"></Set>

<Set name="ExcludeCipherSuites">

<Array type="String">

<Item>SSL_RSA_WITH_DES_CBC_SHA</Item>

<Item>SSL_DHE_RSA_WITH_DES_CBC_SHA</Item>

<Item>SSL_DHE_DSS_WITH_DES_CBC_SHA</Item>

<Item>SSL_RSA_EXPORT_WITH_RC4_40_MD5</Item>

<Item>SSL_RSA_EXPORT_WITH_DES40_CBC_SHA</Item>

<Item>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</Item> <Item>SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</Item>

</Array>

</Set>

</New>

</Arg>

<Arg name="next">HTTP/1.1</Arg>

</New>

</Item>

<Item>

<New class="org.eclipse.jetty.server.HttpConnectionFactory">

<Arg>

<New class="org.eclipse.jetty.server.HttpConfiguration">

<Set name="secureScheme"><Property name="jetty.httpConfig.secureScheme" default="https" /></Set>

<Set name="securePort"><Property name="jetty.httpConfig.securePort" deprecated="jetty.secure.port" default="61361" /></Set>

<Set name="outputBufferSize"><Property name="jetty.httpConfig.outputBufferSize" deprecated="jetty.output.buffer.size" default="32768" /></Set>

<Set name="outputAggregationSize"><Property name="jetty.httpConfig.outputAggregationSize" deprecated="jetty.output.aggregation.size" default="8192" /></Set>

<Set name="requestHeaderSize"><Property name="jetty.httpConfig.requestHeaderSize" deprecated="jetty.request.header.size" default="8192" /></Set>

<Set name="responseHeaderSize"><Property name="jetty.httpConfig.responseHeaderSize" deprecated="jetty.response.header.size" default="8192" /></Set>

<Set name="sendServerVersion"><Property name="jetty.httpConfig.sendServerVersion" deprecated="jetty.send.server.version" default="true" /></Set>

<Set name="sendDateHeader"><Property name="jetty.httpConfig.sendDateHeader" deprecated="jetty.send.date.header" default="false" /></Set>

<Set name="headerCacheSize"><Property name="jetty.httpConfig.headerCacheSize" default="512" /></Set>

<Set name="delayDispatchUntilContent"><Property name="jetty.httpConfig.delayDispatchUntilContent" deprecated="jetty.delayDispatchUntilContent" default="true"/></Set>

</New>

</Arg>

</New>

</Item>

</Array>

</Arg>

<Set name="host"><Property name="jetty.host" /></Set>

<Set name="port"><Property name="jetty.https.port" default="61361" /></Set>

<Set name="idleTimeout">60000</Set>

</New>

</Arg>

</Call>

</Configure>

说明:

1.里面set字段的值都可以修改。尤其要注意KeyStorePath和TrustStorePath的值,一定要确保jetty-ssl.keystore存在。

2.本教程中的jetty-https.xml默认放置在Maven工程目录下(与pom.xml同级)。

3.jetty-https.xml也不是必须的,里面的全部配置可以使用代码来实现。

EmbeddedViaXml.scala

import java.io.File

import java.net.URL

import java.util

import org.eclipse.jetty.server.Server

import org.eclipse.jetty.server.handler.ContextHandler

import org.eclipse.jetty.xml.XmlConfiguration;

object EmbeddedViaXml

{

def main(args: Array[String]): Unit = {

try

{

println(System.getProperty("user.dir"))

val configuration : XmlConfiguration = new XmlConfiguration(new File("jetty-https.xml").toURI().toURL())

val obj = configuration.configure()

val server : Server = obj.asInstanceOf[Server]

server.setStopAtShutdown(true)

val contextHandler = new ContextHandler()

println("ContextHandler...")

contextHandler.setMaxFormContentSize(51200000)

contextHandler.setContextPath("/jtEnv0y")

println("setContextPath /jtEnv0y")

val handler = new jtHandler()

contextHandler.setHandler(handler)

server.setHandler(contextHandler)

server.start()

println("start server")

server.join()

}catch {

case e :Throwable => e.printStackTrace()

}

}

}

jtHandler.scala

import javax.servlet.http.{HttpServletRequest, HttpServletResponse}

import org.eclipse.jetty.server.Request

import org.eclipse.jetty.server.handler.AbstractHandler

class jtHandler extends AbstractHandler{

override def handle(target: String,

req: Request,

request: HttpServletRequest,

response: HttpServletResponse) = {

response.setContentType("application/json; charset=utf-8")

println(target)

println(req.getContextPath)

println(req.getContext)

if (target.contains("jtEnv0y") || req.getContextPath() == "/jtEnv0y"){

val str = Common.getJson(Array("测试成功"))

Common.printString(str,response)

}

else {

Common.printString("请输入正确的路由",response)

}

}

}

Common.scala

import javax.servlet.http.HttpServletResponse

import com.fasterxml.jackson.databind.ObjectMapper

import com.fasterxml.jackson.module.scala.DefaultScalaModule

object Common {

def getJson(res:Any): String ={

new ObjectMapper().registerModule(DefaultScalaModule).writeValueAsString(res)

}

/**

* 用response输出json串

*/

def printString(str: String, response: HttpServletResponse): Unit = {

try {

val out = response.getWriter

out.print(str)

out.flush()

out.close()

} catch {

case e: Exception => println("exception message:", e)

}

}

}

测试

运行EmbeddedViaXml,然后在浏览器输入:https://localhost:61361/jtEnv0y/586

说明:还有一种方法,需要jetty.xml,jetty-https.xml,jetty-ssl.xml三个配置文件,本教程的jetty-https.xml相当于把三个配置文件集合到了一起。

参考:

http://juplo.de/configure-https-for-jetty-maven-plugin-9-0-x/#comment-53352

https://stackoverflow.com/questions/3794892/howto-use-https-ssl-with-maven-mortbay-jetty-plugin/31241196?s=1|10.4523#31241196

http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html

https://stackoverflow.com/questions/17817375/how-can-i-programmatically-start-a-jetty-server-with-multiple-configuration-file?noredirect=1

Jetty容器配置https的更多相关文章

  1. 容器配置https

    生成秘钥库 通过jdk的keytool工具生成秘钥库 keytool -genkeypair -alias "localhost" -keyalg "RSA" ...

  2. solr基于jetty容器配置后台登陆角色用户名密码

    solr版本4.0.0 我的solr下载后解压在d盘,你的随意. 在D:\apache-solr-4.0.0\apache-solr-4.0.0\example\etc目录下新建role.proper ...

  3. Kubernetes 使用 ingress 配置 https 集群(十五)

    目录 一.背景 1.1 需求 1.2 Ingress 1.3 环境介绍 二.安装部署 2.1.创建后端 Pod 应用 2.2 创建后端 Pod Service 2.3.创建 ingress 资源 2. ...

  4. 在容器服务kubernetes上配置https

    当前容器服务Kubernetes集群支持多种应用访问的形式,最常见形式如SLB:Port,NodeIP:NodePort和域名访问等.但是Kubernetes集群默认不支持HTTPS访问,如果用户希望 ...

  5. Jetty:配置概览-须要配置什么

    上一节讲述了怎么配置Jetty,这节将告诉你使用Jetty你须要配置些什么. 配置Server Server实例是Jetty服务端的中心协调对象,它为全部其它Jetty服务端组件提供服务和生命周期管理 ...

  6. Jetty:配置安全

    用${jetty.home}和${jetty.base}配置安全 Jetty 9.1中:  1)${jetty.home}是jetty公布(二进制)的文件夹路径:  2)${jetty.base}是用 ...

  7. SolrCloud7.4(Jetty容器)+mysql oracle 部署与应用

    SolrCloud7.4(Jetty容器)搭建 1.Zookeeper搭建 版本:zookeeper-3.4.10.tar.gz 1.把zookeeper安装包上传到服务器 2.zookeeper解压 ...

  8. 图文详解 IntelliJ IDEA 15 创建 Maven 构建的 Java Web 项目(使用 Jetty 容器)

    图文详解 IntelliJ IDEA 15 创建 maven 的 Web 项目 搭建 maven 项目结构 1.使用 IntelliJ IDEA 15 新建一个项目.  2.设置 GAV 坐标  3. ...

  9. cargo实现自动化部署远程jetty容器(非安全模式)

    cargo实现自动化部署应用至远程jetty容器 (非安全模式) 一.准备: WAR包:Deployer Web application for the Jetty remote containers ...

随机推荐

  1. 死磕itchat源码--config.py

    itchat的配置文件,源码: import os, platform # 版本及微信的url,二维码等 VERSION = '1.3.10' BASE_URL = 'https://login.we ...

  2. 【剑指Offer】2、替换空格

      题目描述:   请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. ...

  3. 01 c++常见面试题总结

    https://www.cnblogs.com/yjd_hycf_space/p/7495640.html   C++常见的面试题 http://c.tedu.cn/workplace/217749. ...

  4. greenplum数据迁移

    源集群: 登录集群su - gpadminpsql -d postgres查询数据库信息\l查询用户信息\du 备份需要迁移的库到指定目录pg_dump -C testdata > /home/ ...

  5. jQuery升级踩坑之路

    1.使用了被废弃的jQuery.browser属性 jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support . 在更 ...

  6. 12.IDEA中自动导资源包

    在idea工程中,当你赋值一个类文件的部分代码,粘贴到另一个文件中时,需要导入原来文件中的包资源, 自动设置如下

  7. 彻底禁用chrome请停用以开发者模式运行的扩展程序弹框

    首先上图 怎么解决呢? 进入安装目录-->下图目录(一串数字的目录) 2. 找到chrome.dll 3.下载patch.exe   下载网址 https://itdocs.pipipan.co ...

  8. springMVC知识点复习

    @ResponseBody和@RequestBody的使用 <html> <script type="text/javascript" src="rel ...

  9. CSS行高line-height的学习

    一.定义和用法 line-height 属性设置行间的距离(行高). 可能的值 normal默认.设置合理的行间距. number设置数字,此数字会与当前的字体尺寸相乘来设置行间距. length设置 ...

  10. isap算法模板poj 1273gap+弧优化 最大流

    几个比较好的博客 http://www.renfei.org/blog/isap.html http://kenby.iteye.com/blog/945454 http://blog.csdn.ne ...