Používam mólo 9, vložené.
Chcem poslať výzvu, keď v mojom súbore vlastností neexistuje používateľské meno.
Rozšíril som triedu BasicAuthenticator, aby som zachytil výnimku normálne vyvolanú, keď užívateľské meno neexistuje. Nevidím, ako potom po výzve používateľa znovu prihlásiť.
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;
}
}
Autentifikácia.SEND_FAILURE zabraňuje volaniu nástroja ErrorHandler, ale načíta iba prázdnu stránku. SEND_FAILURE pochádza z rozhrania overovania.
Podľa odpovede na túto otázku Jetty6 mal metódu odoslania výzvy, Jetty9 nemá. Jetty UserRealm presmeroval 3. neúspešné prihlásenie
odpovede:
0 pre odpoveď č. 1Toto je problém základného overenia.
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;
}
Vráťte 401 a hlavičku http, ktorá obsahuje „WWW-Authenticate“: „Basic“
Autentifikácia.SEND_FAILURE zabráni výnimke ďalej v reťazi obsluhy.