मैं जेट्टी 9 का उपयोग कर रहा हूँ, एम्बेडेड।
मैं एक चुनौती भेजना चाहता हूं जब कोई उपयोगकर्ता नाम मेरे गुण फ़ाइल में मौजूद नहीं है।
मैंने मूल रूप से एक्सेप्शन को पकड़ने के लिए BasicAuthenticator क्लास का विस्तार किया है, जब उपयोगकर्ता नाम "t" मौजूद नहीं होता है। मैं फिर से लॉगिन के साथ उपयोगकर्ता को चुनौती देने के बाद कैसे देख सकता हूं।
public class MyBasicAuthenticator extends BasicAuthenticator{
@Override
public Authentication validateRequest(ServletRequest req,
ServletResponse res, boolean mandatory)
{
Authentication authentication = null;
try{
authentication = super.validateRequest(req,res,mandatory);
return authentication;
}catch (Exception e){
return Authentication.SEND_FAILURE;
}
}
Authentication.SEND_FAILURE ErrorHandler को कॉल करने से रोकता है, लेकिन यह सिर्फ एक खाली पृष्ठ लोड करता है। SEND_FAILURE प्रमाणीकरण इंटरफ़ेस से आता है।
इस सवाल के जवाब के अनुसार Jetty6 में एक चुनौती भेजने की विधि थी, Jetty9 doesn "t। जेट्टी उपयोगकर्ता 3 डी पर विफल लॉगिन पर रीडायरेक्ट
उत्तर:
जवाब के लिए 0 № 1यह एक बुनियादी प्रामाणिक मुद्दा है।
try {
authentication = super.validateRequest(req, res, mandatory);
} catch (Exception e) {
try{
HttpServletResponse r = (HttpServletResponse) res;
r.setHeader("WWW-Authenticate", "Basic");
r.setStatus(401);
} catch(Exception ew){}
authentication = Authentication.SEND_FAILURE;
}
वापसी 401 और एक http हैडर जिसमें "डब्ल्यूडब्ल्यूडब्ल्यू-ऑथेंटिकेट" शामिल है: "बेसिक"
प्रमाणीकरण। END_FAILURE हैंडलर श्रृंखला के नीचे एक अपवाद को रोकता है।