मैं एक RESTful वेब सेवा लागू कर रहा हूं, जहां उपयोगकर्ता को अनुरोध के साथ एक हस्ताक्षरित सत्यापन टोकन भेजना होगा ताकि मैं यह सुनिश्चित कर सकूं कि अनुरोध किसी मध्य व्यक्ति द्वारा छेड़छाड़ नहीं किया गया है। मेरा वर्तमान कार्यान्वयन इस प्रकार है।
सत्यापन टोकन एक VerifData वस्तु है जिसे एक स्ट्रिंग में क्रमबद्ध किया गया है और फिर हैशेड और एन्क्रिप्ट किया गया है।
class VerifData {
int prop1;
int prop2;
}
अपनी सेवा में, मैंने वेरिफ़डाटा के उदाहरण में क्रमबद्ध होने के लिए डेटा डाला और फिर इसे जैक्सन ऑब्जेक्टमैपर का उपयोग करके क्रमबद्ध किया और सत्यापन टोकन के साथ सत्यापन इंजन के साथ पारित किया।
VerfiData verifData = new VerifData(12345, 67890);
ObjectMapper mapper = new ObjectMapper();
String verifCodeGenerated = mapper.writeValueAsString(verifData);
लेकिन ऐसा लगता है कि हर बार एप्लिकेशन कंटेनर शुरू होने पर, ObjectMapper द्वारा गुणों के क्रम को स्ट्रिंग में मैप किया जाता है।
Ex: एक बार यह होगा
{"prop1":12345,"prop2":67890}
और दूसरी बार यह होगा
{"prop2":67890,"prop1":12345}
इसलिए यदि क्लाइंट ने पहले स्ट्रींग के रूप में वेरिफडाटा उदाहरण को क्रमबद्ध किया है, तो इसके सही होने के बावजूद इसके विफल होने की 50% संभावना है।
क्या इस से निकाल पाने के लिए कोई तरीका है? क्या मैं ObjectMapper द्वारा मानचित्रण के लिए गुणों का क्रम निर्दिष्ट कर सकता हूं (जैसे आरोही क्रम में)? या इस सत्यापन कदम को सर्वोत्तम रूप से लागू करने का कोई अन्य तरीका है। क्लाइंट और सर्वर कार्यान्वयन दोनों मेरे द्वारा विकसित किए गए हैं। मैं हस्ताक्षर और सत्यापन के लिए जावा सुरक्षा एपीआई का उपयोग करता हूं।