2017-05-05 1 views
0

Je dois masquer l'URL WSDL ou la rendre disponible uniquement pour les utilisateurs authentifiés. Je ne veux pas exposer http://localhost:8080/services/Application?wsdl.Authentifier l'URL WSDL ou la désactiver

Tomcat version 8.5.11, java 8, Axis 1.4 (je sais la version Axis est trop vieux, mais c'est ce que je dois travailler avec pour l'instant)

Je pensais que je pourrais ajouter une contrainte de sécurité Web .xml comme expliqué ici http://docs.oracle.com/cd/E19798-01/821-1841/bncbk/index.html comme suit:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>WSDL</web-resource-name> 
     <description>WSDL Files</description> 
     <url-pattern>*?wsdl</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>*</role-name> 
    </auth-constraint> 
</security-constraint> 

également trouvé ce fil qui suggère de faire la même chose, mais ne fonctionne pas pour moi Hiding WSDL in JAX-WS

Tomcat jette l'erreur suivante:

org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) 
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3782) 
    at org.apache.catalina.startup.HostConfig.reload(HostConfig.java:1377) 
    at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1350) 
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1586) 
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:280) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94) 
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1164) 
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1388) 
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1392) 
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1360) 
    at java.lang.Thread.run(Thread.java:748) 
Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> *?wsdl in security constraint 
    at org.apache.catalina.core.StandardContext.addConstraint(StandardContext.java:2827) 
    at org.apache.catalina.startup.ContextConfig.configureContext(ContextConfig.java:1317) 
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1190) 
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:775) 
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5087) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 11 more 

Une idée de ce que je fais mal? ou comment je peux réaliser ce qui précède?

Un grand merci à l'avance

+0

Ceci est un mauvais modèle ' *? Wsdl', utilisez plutôt '' * .wsdl 'et votre exception disparaîtra. – hagrawal

+0

Voir [ici] (http: // stackoverflow.com/questions/14018215/what-is-url-pattern-in-web-xml-and-how-to-configure-servlet) pour les modèles d'URL valides. –

+0

Je suis d'accord * .wsdl va se débarrasser de l'exception, mais cela ne résoudra pas le problème. J'ai? Wsdl à la fin de l'URL pas .wsdl. – justMe

Répondre

0

Merci pour tous ceux qui tentent d'aider, après une longue période de lecture documentation AXIS, il semble y avoir deux façons dont nous pourrions désactiver le wsdl à exposer:

1- Par défaut, Axis prévoit trois servlet Axis les gestionnaires de chaîne de requête (? list,? method et? wsdl), si vous désactivez le comportement par défaut, cela ne publiera pas le fichier wsdl, vous pouvez le faire en définissant le drapeau useDefaultQueryStrings sur false comme suit sur le fichier dans le fichier server-config.wsdd:

<transport name="http"> 
     <requestFlow> 
      <handler type="URLMapper"/> 
      <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/> 
     </requestFlow> 
     <parameter name="useDefaultQueryStrings" value="false" /> 
    </transport> 

2- Dans la documentation il y a une section intitulée (préconfiguré Composants Axe de référence) ici il y a un URLMapper avec les descriptions suivantes:

"The URLMapper, an HTTP-specific handler, usually goes on HTTP transport chains (it is deployed by default). It serves to do service dispatch based on URL - for instance, this is the Handler which allows URLs like http://localhost:8080/axis/services/MyService?wsdl to work." 

Si vous commentez le nouveau URLMapper wsdl ne sera pas publié. Vous devez commenter le gestionnaire

<!-- <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>--> 

et la référence en requestFlow:

<transport name="http"> 
    <requestFlow> 
     <!--<handler type="URLMapper"/>--> 
     <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/> 
    </requestFlow> 
</transport> 

Cela devrait suffire.

documentation AXIS ici http://axis.apache.org/axis/java/reference.html

Personnellement, je suis allé avec la première solution, j'apprécierait si quelqu'un pense que nous ne devrions pas faire, soit s'il vous plaît ne hésitez pas à commenter.