Struts 1 कार्रवाई टोकन तरीकों काम के लिए स्ट्रैट्स 2 टोकन इंटरसेप्टर की तरह यह आपके सत्र में एक टोकन जोड़ देगा और फ़ॉर्म सबमिशन पर जांच करेगा, लेकिन यह एक और अधिक मैन्युअल प्रक्रिया है। मूल वर्कफ़्लो है:
- उपयोगकर्ता स्ट्रैट्स एक्शन (सीधे जेएसपी पर नहीं) के माध्यम से फॉर्म में आता है। स्ट्रैट्स एक्शन जेएसपी पर अग्रेषित करने से पहले
saveToken(request)
पर कॉल करेगा जिसमें फॉर्म शामिल है।
- जेएसपी पर फॉर्म
<html:form>
टैग का उपयोग करना चाहिए।
- आपका कार्य जिस फ़ॉर्म को सबमिट करता है, पहले
isTokenValid(request, true)
पर कॉल करेगा, और आपको false
पर लौटने पर त्रुटि संदेश के साथ पहली क्रिया पर रीडायरेक्ट करना चाहिए। यह अगले अनुरोध के लिए टोकन को भी रीसेट करता है।
ऐसा करने से न केवल डुप्लिकेट फॉर्म सबमिशन को रोका जाएगा, लेकिन किसी भी स्क्रिप्ट को पहले स्ट्रूट्स एक्शन को हिट करना होगा और फॉर्म सबमिट करने के लिए दूसरी स्ट्रैट्स एक्शन में सबमिट करने से पहले सत्र प्राप्त करना होगा। चूंकि कोई साइट किसी अन्य साइट के लिए सत्र सेट नहीं कर सकती है, इसलिए इसे सीएसआरएफ को रोकना चाहिए।
यदि आप आमतौर पर सीधे अपने जेएसपी पर उपयोगकर्ताओं को भेजते हैं, तो नहीं। इसके बजाय, ActionForward
से इनहेरिट एक नया वर्ग बना सकते हैं और इस सेट के रूप में यह execute()
विधि है:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
saveToken(request);
return super.execute(mapping, form, request, response);
}
मैन्युअल प्रक्रिया के बजाय
स्रोत
2011-03-17 13:05:19
, एक नहीं बस ActionServlet का विस्तार करने और 'प्रक्रिया में एक ही तर्क को सम्मिलित करने में सक्षम हो जाएगा() टोकन वैधता की जांच करने के लिए विधि? मैं सीएसआरएफ टोकन को बदलने की इच्छा को भी समझ नहीं पा रहा हूं - जो आपदा के लिए एक रसीद की तरह लगता है क्योंकि यह साइट पर किसी भी अन्य खुले पेज/रूपों को अमान्य कर देगा। –