के लिए हैंडलर त्रुटि के लिए कोई एडाप्टर नहीं है, मैं अपने स्प्रिंग 3.1 और RESTEasy प्रोजेक्ट के लिए OAuth 2.0 को कार्यान्वित करना चाहता हूं। परियोजना एक JSON आधारित आरईएसटी सेवा है। मैं स्प्रिंग सिक्योरिटी 3.1 और वसंत-सुरक्षा-ओथ 2 संस्करण 1.0.0 का उपयोग करता हूं। आरसी 2 (जो नवीनतम होना चाहिए)। अभी तक मेरे पास डिफ़ॉल्ट सेटिंग्स के साथ वसंत सुरक्षा सेटअप है। मेरे पास OAuth 2.0 के लिए बहुत बुनियादी (डिफ़ॉल्ट) कॉन्फ़िगरेशन भी है।oauth2 प्रदाता एंडपॉइंट्स
मैंने पहले आरईएसटी सेवा का उपयोग किया, यह सही काम करता है। वसंत सुरक्षा भी ठीक काम करने लगती है। अगर मैं अपनी आरईएसटी सेवा के लिए एक लिंक खोलता हूं तो मुझे लॉगिन पेज पर रीडायरेक्ट किया जाता है। लॉग इन करने के बाद मैं आरईएसटी कॉल कर सकता हूं जो अपेक्षित परिणाम देता है।
जब मैं खोलने हेट यूआरएल localhost:8080/tools-service/oauth/token
या localhost:8080/tools-service/oauth/error
, OAuth परीक्षण करने के लिए, मैं एक त्रुटि 500 निम्न त्रुटि शो है जब मैं /oauth/token
पहुँच जाते हैं। /oauth/error
के लिए त्रुटि सिमुलेटर है।
HTTP Status 500 - No adapter for handler [public org.springframework.http.ResponseEntity org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.getAccessToken(java.security.Principal,java.lang.String,java.util.Map)]: Does your handler implement a supported interface like Controller?
अगर मैं सही हूँ यह संकेत मिलता है TokenEndpoint.getAccessToken
समारोह में एक त्रुटि है कि वहाँ? चूंकि वह वर्ग वसंत ढांचे का हिस्सा है (और मैंने कोड देखा, जो ठीक दिखता है) मुझे नहीं लगता कि समस्या वास्तव में उन वर्गों से संबंधित है। जो मुझे अनजान छोड़ देता है।
अब मैं जानना चाहता हूं कि ऐसा क्यों होता है और मैं इसे कैसे हल कर सकता हूं। मैंने इस तथ्य को माना कि मुझे, शायद, ब्राउज़र में उन यूआरएल का दौरा करने की अनुमति नहीं है। हालांकि अगर मैं स्पार्कलर 2 (the Spring OAuth 2.0 sample application) के साथ ऐसा करने की कोशिश करता हूं तो मुझे एक एक्सएमएल संदेश (/ oauth2/टोकन के लिए) और एक त्रुटि पृष्ठ (/ oauth2/त्रुटि के लिए) मिलता है, जैसा कि अपेक्षित है।
किसी भी मदद या टिप की सराहना की जाएगी। web.xml से
सुरक्षा संबंधित टुकड़ा:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
मेरा आवेदन संदर्भ मेरे द्वारा बनाए गए निम्न सुरक्षा-config.xml फ़ाइल को लोड करता है:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:sec="http://www.springframework.org/schema/security"
xmlns:oauth="http://www.springframework.org/schema/security/oauth2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd
http://www.springframework.org/schema/security/oauth2
http://www.springframework.org/schema/security/spring-security-oauth2.xsd">
<sec:http auto-config="true">
<sec:intercept-url pattern="/**" access="ROLE_USER" />
</sec:http>
<sec:authentication-manager>
<sec:authentication-provider>
<sec:user-service>
<sec:user name="user1" password="test123" authorities="ROLE_USER" />
<sec:user name="user2" password="hello123" authorities="ROLE_USER" />
</sec:user-service>
</sec:authentication-provider>
</sec:authentication-manager>
<sec:global-method-security pre-post-annotations="enabled" proxy-target-class="true">
<sec:expression-handler ref="oauthExpressionHandler" />
</sec:global-method-security>
<bean id="clientDetailsService" class="be.collectortools.rest.service.security.CollectorDetailsServiceImpl" />
<bean id="tokenStore" class="org.springframework.security.oauth2.provider.token.InMemoryTokenStore" />
<bean id="tokenServices" class="org.springframework.security.oauth2.provider.token.DefaultTokenServices">
<property name="tokenStore" ref="tokenStore" />
<property name="supportRefreshToken" value="true" />
<property name="clientDetailsService" ref="clientDetailsService"/>
</bean>
<oauth:authorization-server
client-details-service-ref="clientDetailsService"
token-services-ref="tokenServices">
<oauth:authorization-code />
<oauth:implicit />
<oauth:refresh-token />
<oauth:client-credentials />
<oauth:password />
</oauth:authorization-server>
<oauth:expression-handler id="oauthExpressionHandler" />
</beans>
CollectorClientDetails कार्यान्वयन केवल डमी है कोड:
@Service
public class CollectorDetailsServiceImpl implements ClientDetailsService {
@Resource
private CollectorClientDetailsRepository collectorClientDetailsRepository;
@Override
public ClientDetails loadClientByClientId(final String clientId) throws OAuth2Exception {
CollectorClientDetails dummyClient = new CollectorClientDetails();
dummyClient.setClientId(clientId);
return dummyClient;
}
}
मुझे खुशी है कि ऐसे लोग भी हैं जो इस तरह के अपने प्रश्न का उत्तर देते हैं। इससे कोई फर्क नहीं पड़ता कि आपकी समस्या कितनी अस्पष्ट है, कम से कम एक अन्य उपयोगकर्ता एक ही चीज़ का अनुभव कर रहा है। अगर मैं आपको एक बियर खरीद सकता हूं, लेकिन कम से कम एक अपवॉट होगा :-) – Joe
वर्टोंगन, मुझे एक ही समस्या थी, सभी संबंधित Google परिणाम पढ़े गए हैं, लेकिन केवल आपकी समस्या हल हो गई है, मेरे कोड से गायब था। अपने प्रश्न का उत्तर देने और मेरी मदद करने के लिए धन्यवाद! –
szpetip
आपका स्वागत है। मुझे खुशी है कि इस बार के बाद भी यह उपयोगी है। – Vertongen