2011-09-28 145 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對我來說。