2011-09-28 106 views
0

我需要通过HTTPS提供特定的CXF Web服务(我还有其他几个人需要使用普通的HTTP)。在SecurityConfig.groovy,我设置:Grails-cxf中通过SSL的Web服务?

httpsPort = 8443 

,并试图两者

secureChannelDefinitionSource = ''' 
    CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON 
    PATTERN_TYPE_APACHE_ANT 
    /services/doodah/**=REQUIRES_SECURE_CHANNEL 
    /**=REQUIRES_INSECURE_CHANNEL 
''' 

channelConfig = [ secure: ['/services/productid/**'], insecure: '/' ] 

该服务停止在8080响应HTTP协议,但不会出现上https:8443 - 至少,到8443的telnet连接失败。

如果我用grails run-app -https运行该应用程序,则所有应用程序都通过https运行。

要将http与https服务分开,我可能需要这样做:“Automatic http/httpS switching with Grails”,但现在我想至少获得在两个不同端口上运行的不同服务。

  1. 我应该遵循哪些步骤有一个服务工作通过HTTPS

  2. 看起来像还有别的东西SSL需要在战争中工作,就像在这个问题:SSL, Tomcat and Grails

我的环境是:Grails的1.3.5一样,Acegi安全0.5.3(我知道这是过时的),Tomcat的6

+0

嗯,也许它不会用'grails run-app'工作。它在'tomcat'插件的'TomcatServer.groovy'中查看HTTP和HTTPS启动模式是互斥的。不过,如果我将SSL连接器添加到'server.xml',它可能以不同的方式工作,如果部署到成熟的Tomcat。 –

回答

0

请纠正我,如果我错了。

SecurityConfig.groovy中的两个选项都有效。

在独立的Tomcat中,无法以编程方式启用SSL连接器,必须在全局服务器配置(server.xml)中启用它:SSL, Tomcat and Grails

对于运行的应用程序,我添加scripts/_Events.groovyeventConfigureTomcat钩和在Tomcat的插件复制一块TomcatServer.groovy的:

eventConfigureTomcat = { Tomcat tomcat -> 
    keystore = "./some-keystore" 
    keystoreFile = new File(keystore) 
    keyPassword = "123456" 
    System.setProperty('org.mortbay.xml.XmlParser.NotValidating', 'true') 

    if (!(keystoreFile.exists())) { 
     createSSLCertificate(keystore, keyPassword, keystoreFile) 
    } 

    def httpsPort = 8443 // TODO: Take from SecurityConfig.groovy 

    Connector sslConnector = loadInstance(
     tomcat, 'org.apache.catalina.connector.Connector') 
    sslConnector.scheme = "https" 
    sslConnector.secure = true 
    sslConnector.port = httpsPort 
    sslConnector.setProperty("SSLEnabled", "true") 
    sslConnector.setAttribute("keystore", keystore) 
    sslConnector.setAttribute("keystorePass", keyPassword) 
    sslConnector.URIEncoding = 'UTF-8' 
    tomcat.service.addConnector sslConnector 
} 

我没有做协议开关特技,Grails的正确之间重定向httphttps对我来说。