में फ़िल्टर करना संभव है, मैं फ़िल्टर/सर्वलेट में अनुरोध को अवरुद्ध करना चाहता हूं और इसमें कुछ पैरामीटर जोड़ना चाहता हूं। हालांकि, अनुरोध 'सेट पैरामीटर' विधि का खुलासा नहीं करता है और पैरामीटर मैप जब मैनिप्लेटेड होता है तो यह एक त्रुटि फेंकता है कि यह लॉक है। क्या कोई विकल्प है जिसे मैं कोशिश कर सकता हूं?क्या अनुरोध के उपलब्ध पैरामीटर (HttpServletRequest)
उत्तर
उपवर्ग HttpServletRequestWrapper
और getParameter
तरीकों को ओवरराइड:
इस फिल्टर का एक उदाहरण है। इस वर्ग के वर्णन में लिखा है:
HttpServletRequest इंटरफ़ेस है कि एक सर्वलेट के लिए अनुरोध अनुकूल करने के लिए बधाई देने के लिए डेवलपर्स द्वारा subclassed किया जा सकता है के लिए एक सुविधाजनक कार्यान्वयन प्रदान करता है।
फ़िल्टर में, अनुरोध को अपने उप-वर्ग के उदाहरण में लपेटें।
सबसे पहले आपको अनुरोध प्राप्त करना चाहिए और इसके सभी पैरामीटर पढ़ना चाहिए। फिर मूल पैरामीटर + नए वाले के साथ एक और अनुरोध बनाएं और इसे दोबारा भेजें।
HttpServletRequest अपरिवर्तनीय है और इसे बदलने का कोई तरीका नहीं है।
मैं मूल HttpServletRequest को एक नए CustomHttpServletRequest में लपेटता हूं जो मूल अनुरोध के लिए प्रॉक्सी के रूप में कार्य करता है और फिर फ़िल्टर श्रृंखला में इस नए CustomHttpServletRequest को पास करता है।
इस कस्टमहैट्स्सर्लेट रिवेस्ट में आप GetParameterNames, getParameter, GetParameterMap विधियों को अपने इच्छित पैरामीटर को वापस करने के लिए ओवरराइड कर सकते हैं।
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletRequest customRequest = new CustomHttpServletRequest(httpRequest);
customRequest.addParameter(xxx, "xxx");
chain.doFilter(customRequest, response);
}
धन्यवाद :)। यह काम किया। –
अन्यथा, आप setAttribute() विधि का उपयोग कर सकते हैं जो दृढ़ता से टाइप किया गया है। इसलिए, getAttribute() विधि का उपयोग किया जा सकता है ...
मैं इसे एक संपत्ति-फ़ाइल संचालित तंत्र के रूप में जोड़ रहा हूं जो नियमित अनुरोध को संशोधित करता है। इन आवश्यकताओं को समायोजित करने के लिए यूआई और वास्तविक सर्वलेट दोनों को बदला नहीं जा सकता है - यह पारदर्शी है। –
आप अनुरोध पैरामीटर में उन्हें जोड़ने की कोशिश करने के बजाय अनुरोध स्कोप विशेषताओं के रूप में चर क्यों स्टोर नहीं करते हैं?
मैं इसे एक संपत्ति-फ़ाइल संचालित तंत्र के रूप में जोड़ रहा हूं जो नियमित अनुरोध को संशोधित करता है। इन आवश्यकताओं को समायोजित करने के लिए यूआई और वास्तविक सर्वलेट दोनों को बदला नहीं जा सकता है - यह पारदर्शी है। –
आप HttpServletRequest को नए HttpServletRequestWrapper ऑब्जेक्ट में लपेट सकते हैं और कुछ विधियों को ओवरराइट कर सकते हैं।
निम्नलिखित कोड http://www.ocpsoft.org/opensource/how-to-safely-add-modify-servlet-request-parameter-values/ से है।
फिल्टर में पैरामीटर जोड़ने के लिए:
public class MyFilter implements Filter {
...
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (request instanceof HttpServletRequest) {
HttpServletRequest httprequest = (HttpServletRequest) request;
Map<String, String[]> extraParams = new HashMap<String, String[]>();
extraParams.put("myparamname", String[] { "myparamvalue" });
request = new WrappedRequestWithParameter(httprequest, extraParams);
}
chain.doFilter(request, response);
}
...
class WrappedRequestWithParameter extends HttpServletRequestWrapper {
private final Map<String, String[]> modifiableParameters;
private Map<String, String[]> allParameters = null;
public WrappedRequestWithParameter(final HttpServletRequest request, final Map<String, String[]> additionalParams) {
super(request);
modifiableParameters = new TreeMap<String, String[]>();
modifiableParameters.putAll(additionalParams);
}
@Override
public String getParameter(final String name) {
String[] strings = getParameterMap().get(name);
if (strings != null) {
return strings[0];
}
return super.getParameter(name);
}
@Override
public Map<String, String[]> getParameterMap() {
if (allParameters == null) {
allParameters = new TreeMap<String, String[]>();
allParameters.putAll(super.getParameterMap());
allParameters.putAll(modifiableParameters);
}
// Return an unmodifiable collection because we need to uphold the interface contract.
return Collections.unmodifiableMap(allParameters);
}
@Override
public Enumeration<String> getParameterNames() {
return Collections.enumeration(getParameterMap().keySet());
}
@Override
public String[] getParameterValues(final String name) {
return getParameterMap().get(name);
}
}
}
- 1. HttpServletRequest अनुरोध = this.getThreadLocalRequest() वापस शून्य?
- 2. एक HttpServletRequest में पैरामीटर कैसे सेट करें?
- 3. HttpServletRequest
- 4. संशोधित HttpServletRequest body
- 5. HttpServletRequest
- 6. HttpServletRequest - SetParameter
- 7. मेरे जावा सर्वलेट के मौजूदा HttpServletRequest में पैरामीटर कैसे जोड़ें?
- 8. अनुरोध पैरामीटर और phpdoc
- 9. पहुंच अनुरोध पैरामीटर
- 10. क्या वर्तमान अनुरोध के HttpServletRequest को पाने का कोई स्थिर तरीका है
- 11. MPI_Isend अनुरोध पैरामीटर
- 12. फॉरवर्ड HttpServletRequest एक अलग सर्वर
- 13. जावा सर्वलेट - सत्र सफाई (HttpServletRequest)
- 14. पैरामीटर
- 15. body_stream और पैरामीटर के साथ पोस्ट अनुरोध
- 16. टेम्पलेट द्वारा आउटपुट अनुरोध पैरामीटर
- 17. HttpServletRequest का नकल कैसे करें?
- 18. यदि अनुरोध URI कोई पैरामीटर
- 19. अनुरोध पैरामीटर खोने प्लस साइन
- 20. बिना किसी HttpServletRequest
- 21. बिल्ड HTTP GET अनुरोध पैरामीटर
- 22. HttpServletRequest # getRemoteAddr() रिटर्न NULL
- 23. नियंत्रक/कक्षा में HttpServletRequest पैरामीटर को हटाने का सबसे अच्छा तरीका?
- 24. एक HttpServletRequest मानचित्र का एक विशेषता HTTP कच्चे HTTP अनुरोध के लिए कैसे है?
- 25. पाइथन/Django में वैश्विक अनुरोध चर उपलब्ध है?
- 26. HTTP बहु-भाग (POST) अनुरोध में सीमा पैरामीटर क्या है?
- 27. अनुरोध के आधार पर JavaBeans को आबाद करने का आसान तरीका पैरामीटर
- 28. कैसे खेलने के सारे अनुरोध पैरामीटर हो और स्काला के
- 29. अनुरोध के पैरामीटर के मान को संशोधित करें
- 30. Grails बाँध अनुरोध पैरामीटर Enum को
धन्यवाद :)। यह काम किया। –
क्या आप एक उदाहरण प्रदान कर सकते हैं? –
पब्लिक क्लास कस्टमहट्स्सर्वलेटरक्वेटवापर एचटीपीएसर्लेट रिवेस्टवापर का विस्तार करता है { \t निजी मानचित्र <स्ट्रिंग, स्ट्रिंग> कस्टम पैरामीटर; \t सार्वजनिक कस्टमहैट्स्सर्वलेटरक्वेटवापर (एचटीपीएसर्लेट अनुरोध अनुरोध) { \t \t सुपर (अनुरोध); \t} \t सार्वजनिक शून्य addCustomParameter (स्ट्रिंग नाम, स्ट्रिंग मान) { \t \t customParameters।रखो (नाम, मूल्य); \t} \t @Override \t सार्वजनिक स्ट्रिंग getParameter (स्ट्रिंग नाम) { \t \t स्ट्रिंग originalParameter = super.getParameter (नाम); \t \t यदि (मूल पैरामीटर! = शून्य) { \t \t मूल वापसी पैरामीटर; \t \t} अन्य { \t \t \t वापसी customParameters.get (नाम); \t \t} \t} } – Riccati