/ / चुनौती लॉगिन, मूल प्रमाणीकरण - जेट्टी, बुनियादी प्रमाणीकरण, एम्बेडेड-जेटी

चुनौती लॉगिन, मूल प्रमाणीकरण - जेटी, मूल प्रमाणीकरण, एम्बेडेड जेटी

मैं जेट्टी 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 प्रमाणीकरण इंटरफ़ेस से आता है।

JavaDoc: http://download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/security/authentication/BasicAuthenticator.html

इस सवाल के जवाब के अनुसार 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 हैंडलर श्रृंखला के नीचे एक अपवाद को रोकता है।