zoukankan      html  css  js  c++  java
  • Jetty容器配置https

    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">云化转型myScalaTest3jetty-ssl.keystore</Set>

                        <Set name="TrustStorePath">云化转型myScalaTest3jetty-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

  • 相关阅读:
    easy ui 表单ajax和from两种提交数据方法
    easy ui 下拉级联效果 ,下拉框绑定数据select控件
    easy ui 下拉框绑定数据select控件
    easy ui 异步上传文件,跨域
    easy ui 菜单和按钮(Menu and Button)
    HTTP 错误 404.3
    EXTJS4.2 后台管理菜单栏
    HTML 背景图片自适应
    easy ui 表单元素input控件后面加说明(红色)
    EXTJS 4.2 添加滚动条
  • 原文地址:https://www.cnblogs.com/envoy/p/8358794.html
Copyright © 2011-2022 走看看