2016-01-05 30 views
3

我使用tomcat7-maven-plugin来运行我的应用程序(tomcat7:运行)。我在没有https的配置中使用<uriEncoding>utf-8</uriEncoding>,并且一切正常。但是,一旦我添加https编码停止工作。Apache Tomcat Maven插件uriEncoding不与https协同工作

当我做客户端这样的请求:https://localhost:8443/ROOT/checkName?mediaName=%C3%A7%C3%A7

我收到此服务器上:çç

下面是一些我的pom.xml的:

  <plugin> 
       <groupId>org.apache.tomcat.maven</groupId> 
       <artifactId>tomcat7-maven-plugin</artifactId> 
       <configuration> 
        <warSourceDirectory>src/main/webapp</warSourceDirectory> 
        <path>/${project.warname}</path> 
        <warFile>target/${project.warname}##${maven.build.timestamp}-${project.name}-v${project.version}</warFile> 
        <uriEncoding>utf-8</uriEncoding> 

        <!-- HTTPS --> 
        <httpsPort>8443</httpsPort> 
        <keystoreFile>${user.home}/.mvnkeystore</keystoreFile> 
        <keystorePass>changeit</keystorePass> 
        <!-- HTTPS --> 

       </configuration> 
       <dependencies> 
        <dependency> 
         <groupId>mysql</groupId> 
         <artifactId>mysql-connector-java</artifactId> 
         <version>5.1.25</version> 
        </dependency> 
        <dependency> 
         <groupId>org.apache.tomcat.embed</groupId> 
         <artifactId>tomcat-embed-core</artifactId> 
         <version>${tomcat.version}</version> 
        </dependency> 
       </dependencies> 
      </plugin> 

而且web.xml:

<security-constraint> 
     <web-resource-collection> 
      <web-resource-name>securedapp</web-resource-name> 
      <url-pattern>/*</url-pattern> 
     </web-resource-collection> 
     <user-data-constraint> 
      <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
     </user-data-constraint> 
    </security-constraint> 

如果我删除https标记,则启动uriEncondig再次工作。

+1

要去试一下,没时间了。感谢您的答案 –

回答

2

它是Apache Tomcat Maven插件的报告的bug - MTOMCAT-264。 有一个开放的PR in github来修复它。

您可以通过使用serverXml参数与文档中提到的警告解决该问题。

serverXml:要使用的server.xml注意,如果使用此选项,则必须在此文件中配置您的webapp路径。

+0

@Abdelhak你认为这是一个[很好的答案](http://stackoverflow.com/a/34672502/1700321)?如果你改进它,我会删除downvote。没有任何意见可以降低报复的答案。 –

1

我认为你需要配置HTTPS连接器 - 在服务器中。见here相关问题。事实上,你分配一个值的httpsPort属性,意味着你只需启用连接器(我猜一些默认值) - 作为plugin documentation suggests

您需要具有以下配置连接器:

<Connector port="443" protocol="HTTP/1.1" 
      maxThreads="150" connectionTimeout="20000" 
      SSLEnabled="true" scheme="https" secure="true" 
      keystoreFile="conf/.keystore" 
      keystorePass="changeit" 
      clientAuth="false" sslProtocol="TLS" 
      URIEncoding="UTF-8" compression="on"/> 

希望它可以帮助