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. PAT_A1113#Integer Set Partition

    Source: PAT A1113 Integer Set Partition (25 分) Description: Given a set of N (>) positive integer ...

  3. [luogu2317 HNOI2005] 星际贸易 (dp)

    传送门 Solution 两个dp分开处理, 第一问什么都不考虑直接dp 第二问还有些疑惑,姑且先留坑 Code //By Menteur_Hxy #include <cstdio> #i ...

  4. python-写入csv 文件

    项目要做一个导出客户信息的功能,需要写入csv: 注意文件写入的方式  例如   write open(‘w’) 从头开始写,之前写的会被替换  write open(‘a’) 则代表追加,文件指针放 ...

  5. 域名和ip、端口的关系

    背景:新建一个项目,属于RPC服务,调用时需要ip+端口. 在工单系统里走流程,强制填写域名.之前也操作过,感觉域名不重要.我本来需要填写ip+端口,你给整个域名,那我端口往哪写?(一直以为域名=ip ...

  6. css sprites拼合

    一.什么是css sprites css sprites直译过来就是CSS精灵.通常被解释为“CSS图像拼合”或“CSS贴图定位”.就是把网页中一些背景图片整合拼合成一张图片中,再利用DIV CSS的 ...

  7. Tensorflow 0.8.0 安装配置方法

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51280087 折腾了一下,给工作站配置 ...

  8. (30)导入时如何定制spring-boot依赖项的版本【转载】【从零开始学Spring Boot】

    此文章转载地址:http://www.tuicool.com/articles/RJJvMj3 请注重作者的版权. spring-boot通过maven的依赖管理为我们写好了很多依赖项及其版本,我们可 ...

  9. MySQL主要命令(4)

    显示数据, 给列区别名: select coL_name as 别名     from table_name;

  10. HDU4565 So Easy!

    /* HDU4565 So Easy! http://acm.hdu.edu.cn/showproblem.php?pid=4565 数论 快速幂 矩阵快速幂 题意:求[(a+sqrt(b))^n ] ...