Note that there are some explanatory texts on larger screens.

plurals
  1. POGAE HTTPS on local DevAppServer in Eclipse using appengine-maven-plugin
    primarykey
    data
    text
    <p>I'm a Java/Web newbie and I was hoping someone on here could help me.</p> <p>I'm building a GAE application using Spring in Eclipse (Juno Windows 7). The project was generated using the Maven plugin for Eclipse (using Maven 3.1.0) and the appengine-maven-plugin for Maven (using the GAE SDK 1.8.3).</p> <p>The majority of my messages must be sent over HTTPS and I enforce this in my Spring configuration. However, I'm at a loss for how to configure the local DevAppServer to support HTTPS.</p> <p>I started by creating a certificate</p> <pre><code>keytool -keystore myKeystore -genkey -keyalg RSA </code></pre> <p>which I would hope to supply to the server. However, GAE seems to be running inside its own version of Jetty and it's not clear if I can modify it.</p> <p>I attempted to push it via command line arguments</p> <pre><code>&lt;plugin&gt; &lt;groupId&gt;com.google.appengine&lt;/groupId&gt; &lt;artifactId&gt;appengine-maven-plugin&lt;/artifactId&gt; &lt;version&gt;${appengine.target.version}&lt;/version&gt; &lt;configuration&gt; &lt;useJava7&gt;true&lt;/useJava7&gt; &lt;address&gt;127.0.0.1&lt;/address&gt; &lt;port&gt;8080&lt;/port&gt; &lt;compileEncoding&gt;utf-8&lt;/compileEncoding&gt; &lt;jvmFlags&gt; &lt;jvmFlag&gt;-Xdebug&lt;/jvmFlag&gt; &lt;jvmFlag&gt;-Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=y&lt;/jvmFlag&gt; &lt;jvmFlag&gt;-Djavax.net.ssl.keyStore=C:\STEVEN-DEV\projects\apps\testserver\src\main\webapp\WEB-INF\myKeystore&lt;/jvmFlag&gt; &lt;jvmFlag&gt;-Djavax.net.ssl.keyStorePassword=testpass&lt;/jvmFlag&gt; &lt;/jvmFlags&gt; &lt;/configuration&gt; &lt;/plugin&gt; </code></pre> <p>I know the keystore is being loaded because I see exceptions if the path is wrong. However, I'm not really sure what it's being loaded into and if that's even what I want to do.</p> <p>When I debug the app from Eclipse, this appears in my logs after the app is packaged:</p> <pre><code>Running C:\Program Files\Java\jdk1.7.0_10\jre\bin\java -javaagent:C:\Users\Steven\.m2\repository\com\google\appengine\appengine-java-sdk\1.8.3\appengine-java-sdk\appengine-java-sdk-1.8.3\lib\agent\appengine-agent.jar -Xbootclasspath/p:C:\Users\Steven\.m2\repository\com\google\appengine\appengine-java-sdk\1.8.3\appengine-java-sdk\appengine-java-sdk-1.8.3\lib\override\appengine-dev-jdk-overrides.jar -Dappengine.fullscan.seconds=5 -classpath C:\Users\Steven\.m2\repository\com\google\appengine\appengine-java-sdk\1.8.3\appengine-java-sdk\appengine-java-sdk-1.8.3\lib\appengine-tools-api.jar -Xdebug -Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=y -Djavax.net.ssl.keyStore=C:\STEVEN-DEV\projects\apps\testserver\src\main\webapp\WEB-INF\myKeystore -Djavax.net.ssl.keyStorePassword=testpass com.google.appengine.tools.development.DevAppServerMain --allow_remote_shutdown -a 127.0.0.1 -p 8080 C:\STEVEN-DEV\projects\apps\testserver\target/testserver-0.0.1-SNAPSHOT </code></pre> <p>If I open chrome and attempt to access</p> <pre><code>https://localhost:8080/test/retval </code></pre> <p>I see "SSL Connection Error" and "Error code: ERR_SSL_PROTOCOL_ERROR"</p> <p>If I try to browse to</p> <pre><code>http://localhost:8080/test/retval </code></pre> <p>I will be forwarded to</p> <pre><code>https://localhost:8443/test/retval </code></pre> <p>and be told that "This webpage is not available".</p> <p><strong>Update 2:</strong> After taking another look at the docs I found this</p> <blockquote> <p>The development web server does not support HTTPS connections. It ignores the transport guarantee, so paths intended for use with HTTPS can be tested using regular HTTP connections to the development web server.</p> </blockquote> <p>So it seems that my problem is that my Spring configuration forces HTTPS. I can take this out and allow any connection type. However, I'm not keen on doing that and would prefer a way to configure/hack the dev server to support SSL.</p> <p><strong>(Return to old question: What I have been attempting)</strong></p> <p>I don't know where my error lies: GAE, Maven or Spring.</p> <p>The following is my complete pom.xml</p> <p>I've been reading documentation and searching the web for hours. Any help would be much appreciated.</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;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"&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;packaging&gt;war&lt;/packaging&gt; &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt; &lt;groupId&gt;com.steven&lt;/groupId&gt; &lt;artifactId&gt;testserver&lt;/artifactId&gt; &lt;properties&gt; &lt;java.version&gt;1.7&lt;/java.version&gt; &lt;maven.enforcer.plugin-version&gt;1.3.1&lt;/maven.enforcer.plugin-version&gt; &lt;maven.version.range&gt;[2.2.1,3.1.0]&lt;/maven.version.range&gt; &lt;appengine.app.version&gt;1&lt;/appengine.app.version&gt; &lt;appengine.target.version&gt;1.8.3&lt;/appengine.target.version&gt; &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt; &lt;org.springframework-version&gt;3.2.3.RELEASE&lt;/org.springframework-version&gt; &lt;org.springframework.security-version&gt;3.1.4.RELEASE&lt;/org.springframework.security-version&gt; &lt;org.slf4j-version&gt;1.7.5&lt;/org.slf4j-version&gt; &lt;ch.qos.logback-version&gt;1.0.13&lt;/ch.qos.logback-version&gt; &lt;org.codehaus.jackson-version&gt;1.9.12&lt;/org.codehaus.jackson-version&gt; &lt;/properties&gt; &lt;dependencies&gt; &lt;!-- Compile/runtime dependencies --&gt; &lt;dependency&gt; &lt;groupId&gt;com.google.appengine&lt;/groupId&gt; &lt;artifactId&gt;appengine-api-1.0-sdk&lt;/artifactId&gt; &lt;version&gt;${appengine.target.version}&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;javax.servlet&lt;/groupId&gt; &lt;artifactId&gt;servlet-api&lt;/artifactId&gt; &lt;version&gt;2.5&lt;/version&gt; &lt;scope&gt;provided&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;jstl&lt;/groupId&gt; &lt;artifactId&gt;jstl&lt;/artifactId&gt; &lt;version&gt;1.2&lt;/version&gt; &lt;/dependency&gt; &lt;!-- Test Dependencies --&gt; &lt;dependency&gt; &lt;groupId&gt;com.google.appengine&lt;/groupId&gt; &lt;artifactId&gt;appengine-testing&lt;/artifactId&gt; &lt;version&gt;${appengine.target.version}&lt;/version&gt; &lt;scope&gt;test&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;com.google.appengine&lt;/groupId&gt; &lt;artifactId&gt;appengine-api-stubs&lt;/artifactId&gt; &lt;version&gt;${appengine.target.version}&lt;/version&gt; &lt;scope&gt;test&lt;/scope&gt; &lt;/dependency&gt; &lt;!-- Spring Core --&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework&lt;/groupId&gt; &lt;artifactId&gt;spring-core&lt;/artifactId&gt; &lt;version&gt;${org.springframework-version}&lt;/version&gt; &lt;exclusions&gt; &lt;exclusion&gt; &lt;groupId&gt;commons-logging&lt;/groupId&gt; &lt;artifactId&gt;commons-logging&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;/exclusions&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework&lt;/groupId&gt; &lt;artifactId&gt;spring-web&lt;/artifactId&gt; &lt;version&gt;${org.springframework-version}&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework&lt;/groupId&gt; &lt;artifactId&gt;spring-webmvc&lt;/artifactId&gt; &lt;version&gt;${org.springframework-version}&lt;/version&gt; &lt;/dependency&gt; &lt;!-- Spring Security --&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.security&lt;/groupId&gt; &lt;artifactId&gt;spring-security-core&lt;/artifactId&gt; &lt;version&gt;${org.springframework.security-version}&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.security&lt;/groupId&gt; &lt;artifactId&gt;spring-security-web&lt;/artifactId&gt; &lt;version&gt;${org.springframework.security-version}&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.security&lt;/groupId&gt; &lt;artifactId&gt;spring-security-config&lt;/artifactId&gt; &lt;version&gt;${org.springframework.security-version}&lt;/version&gt; &lt;/dependency&gt; &lt;!-- JSON --&gt; &lt;dependency&gt; &lt;groupId&gt;org.codehaus.jackson&lt;/groupId&gt; &lt;artifactId&gt;jackson-mapper-asl&lt;/artifactId&gt; &lt;version&gt;${org.codehaus.jackson-version}&lt;/version&gt; &lt;/dependency&gt; &lt;!-- Logging --&gt; &lt;dependency&gt; &lt;groupId&gt;org.slf4j&lt;/groupId&gt; &lt;artifactId&gt;jcl-over-slf4j&lt;/artifactId&gt; &lt;version&gt;${org.slf4j-version}&lt;/version&gt; &lt;scope&gt;runtime&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.slf4j&lt;/groupId&gt; &lt;artifactId&gt;slf4j-api&lt;/artifactId&gt; &lt;version&gt;${org.slf4j-version}&lt;/version&gt; &lt;scope&gt;runtime&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;ch.qos.logback&lt;/groupId&gt; &lt;artifactId&gt;logback-classic&lt;/artifactId&gt; &lt;version&gt;${ch.qos.logback-version}&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;ch.qos.logback&lt;/groupId&gt; &lt;artifactId&gt;logback-core&lt;/artifactId&gt; &lt;version&gt;${ch.qos.logback-version}&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt; &lt;repositories&gt; &lt;repository&gt; &lt;id&gt;springsource-repo&lt;/id&gt; &lt;name&gt;SpringSource Repository&lt;/name&gt; &lt;url&gt;http://repo.springsource.org/release&lt;/url&gt; &lt;/repository&gt; &lt;/repositories&gt; &lt;build&gt; &lt;pluginManagement&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;groupId&gt;org.eclipse.m2e&lt;/groupId&gt; &lt;artifactId&gt;lifecycle-mapping&lt;/artifactId&gt; &lt;version&gt;1.0.0&lt;/version&gt; &lt;configuration&gt; &lt;lifecycleMappingMetadata&gt; &lt;pluginExecutions&gt; &lt;pluginExecution&gt; &lt;pluginExecutionFilter&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-enforcer-plugin&lt;/artifactId&gt; &lt;versionRange&gt;[1.0.0,)&lt;/versionRange&gt; &lt;goals&gt; &lt;goal&gt;enforce&lt;/goal&gt; &lt;/goals&gt; &lt;/pluginExecutionFilter&gt; &lt;action&gt; &lt;ignore /&gt; &lt;/action&gt; &lt;/pluginExecution&gt; &lt;/pluginExecutions&gt; &lt;/lifecycleMappingMetadata&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;/plugins&gt; &lt;/pluginManagement&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;version&gt;2.5.1&lt;/version&gt; &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt; &lt;configuration&gt; &lt;source&gt;1.7&lt;/source&gt; &lt;target&gt;1.7&lt;/target&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-war-plugin&lt;/artifactId&gt; &lt;version&gt;2.3&lt;/version&gt; &lt;configuration&gt; &lt;archiveClasses&gt;true&lt;/archiveClasses&gt; &lt;webResources&gt; &lt;!-- in order to interpolate version from pom into appengine-web.xml --&gt; &lt;resource&gt; &lt;directory&gt;${basedir}/src/main/webapp/WEB-INF&lt;/directory&gt; &lt;filtering&gt;true&lt;/filtering&gt; &lt;targetPath&gt;WEB-INF&lt;/targetPath&gt; &lt;/resource&gt; &lt;/webResources&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-enforcer-plugin&lt;/artifactId&gt; &lt;version&gt;${maven.enforcer.plugin-version}&lt;/version&gt; &lt;executions&gt; &lt;execution&gt; &lt;id&gt;enforce-banned-dependencies&lt;/id&gt; &lt;goals&gt; &lt;goal&gt;enforce&lt;/goal&gt; &lt;/goals&gt; &lt;configuration&gt; &lt;rules&gt; &lt;bannedDependencies&gt; &lt;searchTransitive&gt;true&lt;/searchTransitive&gt; &lt;excludes&gt; &lt;exclude&gt;javassist:javassist&lt;/exclude&gt; &lt;exclude&gt;commons-logging&lt;/exclude&gt; &lt;exclude&gt;aspectj:aspectj*&lt;/exclude&gt; &lt;exclude&gt;hsqldb:hsqldb&lt;/exclude&gt; &lt;exclude&gt;log4j:log4j&lt;/exclude&gt; &lt;exclude&gt;org.slf4j:[1.5, 1.6.5]&lt;/exclude&gt; &lt;exclude&gt;org.springframework:2.*&lt;/exclude&gt; &lt;exclude&gt;org.springframework:3.0.*&lt;/exclude&gt; &lt;/excludes&gt; &lt;/bannedDependencies&gt; &lt;requireMavenVersion&gt; &lt;version&gt;${maven.version.range}&lt;/version&gt; &lt;/requireMavenVersion&gt; &lt;requireJavaVersion&gt; &lt;version&gt;${java.version}&lt;/version&gt; &lt;/requireJavaVersion&gt; &lt;/rules&gt; &lt;fail&gt;true&lt;/fail&gt; &lt;/configuration&gt; &lt;/execution&gt; &lt;/executions&gt; &lt;/plugin&gt; &lt;plugin&gt; &lt;groupId&gt;com.google.appengine&lt;/groupId&gt; &lt;artifactId&gt;appengine-maven-plugin&lt;/artifactId&gt; &lt;version&gt;${appengine.target.version}&lt;/version&gt; &lt;configuration&gt; &lt;useJava7&gt;true&lt;/useJava7&gt; &lt;address&gt;127.0.0.1&lt;/address&gt; &lt;port&gt;8080&lt;/port&gt; &lt;compileEncoding&gt;utf-8&lt;/compileEncoding&gt; &lt;jvmFlags&gt; &lt;jvmFlag&gt;-Xdebug&lt;/jvmFlag&gt; &lt;jvmFlag&gt;-Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=y&lt;/jvmFlag&gt; &lt;jvmFlag&gt;-Djavax.net.ssl.keyStore=C:\STEVEN-DEV\projects\apps\testserver\src\main\webapp\WEB-INF\myKeystore&lt;/jvmFlag&gt; &lt;jvmFlag&gt;-Djavax.net.ssl.keyStorePassword=testpass&lt;/jvmFlag&gt; &lt;/jvmFlags&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;/plugins&gt; &lt;/build&gt; &lt;/project&gt; </code></pre> <p><strong>Update:</strong> I have tried this with and without security constraints in my web.xml</p> <p>I can't help but think that I need to find a way to configure the Jetty used by the app engine plugin to work with SSL</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&gt; &lt;display-name&gt;Test Server&lt;/display-name&gt; &lt;!-- Spring MVC --&gt; &lt;servlet&gt; &lt;servlet-name&gt;mvc-dispatcher&lt;/servlet-name&gt; &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;mvc-dispatcher&lt;/servlet-name&gt; &lt;url-pattern&gt;/&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;listener&gt; &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt; &lt;/listener&gt; &lt;context-param&gt; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt; &lt;param-value&gt;/WEB-INF/mvc-dispatcher-servlet.xml, /WEB-INF/spring-security.xml&lt;/param-value&gt; &lt;/context-param&gt; &lt;!-- Spring Security --&gt; &lt;filter&gt; &lt;filter-name&gt;springSecurityFilterChain&lt;/filter-name&gt; &lt;filter-class&gt;org.springframework.web.filter.DelegatingFilterProxy&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;springSecurityFilterChain&lt;/filter-name&gt; &lt;url-pattern&gt;/*&lt;/url-pattern&gt; &lt;/filter-mapping&gt; &lt;security-constraint&gt; &lt;web-resource-collection&gt; &lt;web-resource-name&gt;test&lt;/web-resource-name&gt; &lt;url-pattern&gt;/test/*&lt;/url-pattern&gt; &lt;/web-resource-collection&gt; &lt;user-data-constraint&gt; &lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt; &lt;/user-data-constraint&gt; &lt;/security-constraint&gt; &lt;/web-app&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload