मैंने वसंत के साथ अपाचे सीएक्सएफ सीखना शुरू कर दिया है। सबसे पहले, मैंने एक साधारण क्लाइंट/सर्वर मॉडल बनाया है: see hereअपाचे सीएक्सएफ + वसंत: सरल प्रमाणपत्र प्रमाणीकरण
अब मैं एक सरल प्रमाणपत्र प्रमाणीकरण का उपयोग करने की कोशिश कर रहा हूं। CXF-servlet.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<jaxws:endpoint
id="helloWorld"
implementor="service.HelloWorldImpl"
address="/HelloWorld">
<jaxws:features>
<bean class="org.apache.cxf.feature.LoggingFeature"/>
</jaxws:features>
<jaxws:inInterceptors>
<bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"/>
<ref bean="WSS4JInInterceptor"/>
</jaxws:inInterceptors>
</jaxws:endpoint>
<bean id="WSS4JInInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<constructor-arg>
<map>
<entry key="action" value="Signature"/>
<entry key="passwordCallbackRef">
<ref bean="passwordCallback"/>
</entry>
<entry key="signaturePropFile" value="server_sign.properties"/>
</map>
</constructor-arg>
</bean>
<bean id="passwordCallback" class="service.PasswordCallbackHandler" />
server_sign.properties:
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=keyStorePassword
org.apache.ws.security.crypto.merlin.file=publicstore.jks
तो यह है कि मैं विन्यास फाइल (सर्वर और ग्राहक के लिए) बदल दिया है cxf-client-servlet.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schema/jaxws.xsd">
<bean id="client" class="service.HelloWorld" factory-bean="clientFactory" factory-method="create"/>
<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="service.HelloWorld"/>
<property name="address" value="http://localhost:8080/services/HelloWorld"/>
<property name="outInterceptors">
<list>
<bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor"/>
<ref bean="WSS4JOutInterceptor"/>
</list>
</property>
</bean>
<bean id="WSS4JOutInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
<property name="properties">
<map>
<entry key="action" value="Signature"/>
<entry key="user" value="ws-client" />
<entry key="passwordCallbackRef">
<ref bean="passwordCallback"/>
</entry>
<entry key="signaturePropFile" value="client_sign.properties"/>
</map>
</property>
</bean>
<bean id="passwordCallback" class="client.PasswordCallbackHandler" />
ग्राहक पूरी तरह से काम कर रहा है। यह इसका पासवर्डकॉलबैक हैंडलर का उपयोग करता है। समस्या यह है कि सर्वर अपने पासवर्डकॉलबैक हैंडलर का उपयोग नहीं कर रहा है। मैंने सर्वर को डीबग मोड में चलाया है, लेकिन यह इस कक्षा में नहीं जाता है। क्या कोई, कृपया, समझाओ, मैं गलत क्या कर सकता हूं?
अग्रिम धन्यवाद।
प्रगति:
यदि आप एक उपयोगकर्ता है, जो प्रमाणपत्र सर्वर के कुंजीस्टोर में नहीं है, त्रुटि उठाया है ("उपयोगकर्ता WS-client1 के लिए कोई प्रमाण पत्र से एक अनुरोध प्रदान करने की कोशिश पाए गए हस्ताक्षर के लिए ")
- the resource से
:" आप ऊपर jbossws-cxf.xml फ़ाइल में देख सकते हैं, एक कुंजी संग्रह पासवर्ड कॉलबैक हैंडलर भी कॉन्फ़िगर किया गया है, जबकि गुण फ़ाइल कीस्ट्रोक के लिए पासवर्ड है, इस कॉलबैक हैंडलर प्रत्येक कुंजी के लिए पासवर्ड सेट करने के लिए प्रयोग किया जाता है (इसे करना है दुकान में प्रत्येक कुंजी आयात होने पर इस्तेमाल किए गए मैच से मेल खाते हैं)। "
आपके उत्तर के लिए धन्यवाद। लेकिन मैं केवल हस्ताक्षर तंत्र का उपयोग करना चाहता हूं। क्या यह संभव है? – Dmitry
पासवर्ड के लिए, ऐसा लगता है कि कॉलबैक किसी भी तरह उपयोग में होना चाहिए। लेकिन यह निश्चित रूप से IMHO है) – Dmitry
आपके मूल प्रश्न "क्यों 'पासवर्डकॉलबैक हैंडलर' नहीं कहा जाता है"। मैंने अपने जवाब में क्या रखा है: आपने उचित कार्रवाई को याद किया। अगर आपको केवल हस्ताक्षर की आवश्यकता है, तो आप केवल 'हस्ताक्षर' कार्रवाई छोड़ दें और दोनों सामग्री से 'पासवर्ड कॉलबैक' और 'उपयोगकर्ता' प्रविष्टियों को सुरक्षित रूप से हटा सकते हैं। मुझे उम्मीद है कि आप समझते हैं कि 'पासवर्ड कॉलबैक हैंडलर' को सीएक्सएफ ढांचे द्वारा एप्लिकेशन से पूछने के लिए कहा जाता है, यदि उपयोगकर्ता और पासवर्ड मान्य हैं, और यह हस्ताक्षर करने के लिए कुछ भी नहीं है। आपके कीस्टोर के लिए पासवर्ड को 'क्लाइंट/सर्वर.प्रोपर्टीज' में संगत रूप से परिभाषित किया जाना चाहिए। –