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. elasticsearch重建索引

    1.重建索引 一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中 批量 ...

  2. 【JavaScript】通过封装自己的JSONP解决浏览器的跨域问题(Ajax跨域)

    问题引出:要发送Ajax请求,就必须使用HTTP请求?什么是跨域问题? 什么是跨域问题:如果两个页面中的协议.域名.端口.子域名任意有一项不同,两者之间所进行的访问行动就是跨域的,而浏览器为了安全问题 ...

  3. Yii2验证码使用教程

    控制器代码 public function actions() { return [ 'captcha' => [ 'class' => 'yii\captcha\CaptchaActio ...

  4. CentOS7安装Kubernetes

    CentOS7安装Kubernetes 安装Kubernetes时候需要一台机器作为管理机器,1台或者多台机器作为集群中的节点. 系统信息: Hosts: 请将IP地址换成自己环境的地址. cento ...

  5. BeanUtils.copyProperties()错误使用,给自己挖了坑

    场景:需要对某个集合中的所有元素拷贝到另一个集合中,想着BeanUtils.copyProperties()可以深拷贝对象,误以为也可以拷贝集合,于是乎写下了如下代码 List<CostRule ...

  6. 【Codeforces 342A】Xenia and Divisors

    [链接] 我是链接,点我呀:) [题意] [题解] 最后a,b,c只有以下3种情况 1,2,4 1,2,6 1,3,6 那么用cnt[8]统计每个数字出现的次数. 输出cnt[4]次1,2,4 (如果 ...

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

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

  8. redis-windows上的安装与其他命令

    为什么用Redis 数据库的IO是一个性能瓶颈,需要用redis来解决,100个IO并发已经很不错了,因为数据库天生就需要写磁盘,而redis不需要实时写磁盘而又可以存入数据库 安装 以服务的方式启动 ...

  9. Amoeba for MySQL 中间件

      来源:http://docs.hexnova.com/amoeba/ Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路 ...

  10. Java&amp;&amp;(面试题)初始化顺序总结

    1  无继承情况下的Java初始化顺序: class Sample {       Sample(String s)       {             System.out.println(s) ...