target.register(new HttpBasicAuthFilter(username, password));
MultivaluedMap payLoad = new MultivaluedHashMap();
payLoad.putSingle("remoteHostName", request.getRemoteHost());
Response resp = target.request(RESPONSE_TYPE).post(Entity.entity(payLoad, MediaType.APPLICATION_FORM_URLENCODED), Response.class);
RestResponse restResp = RestResponse.getRestResponse(resp);
// Check to see if successful..
if (restResp.isSuccess()) {
// Username and Password sent in... validate them!
CallerPrincipalCallback cpCallback =
new CallerPrincipalCallback(clientSubject, username);
try {
handler.handle(new Callback[]{ /*pwdCallback,*/cpCallback});
} catch (Exception ex) {
AuthException ae = new AuthException();
ae.initCause(ex);
throw ae;
}
// recreate the session
Map<String, Object> map = new HashMap<String, Object>();
Enumeration<String> names = session.getAttributeNames();
while (names.hasMoreElements()) {
String key = names.nextElement();
map.put(key, session.getAttribute(key));
}
session.invalidate();
session = request.getSession(true);
for (Map.Entry<String, Object> e : map.entrySet()) {
session.setAttribute(e.getKey(), e.getValue());
}
if (session != null) {
// Get the "extraProperties" section of the response...
Object obj = restResp.getResponse().get("data");
Map extraProperties = null;
if ((obj != null) && (obj instanceof Map)) {
obj = ((Map) obj).get("extraProperties");
if ((obj != null) && (obj instanceof Map)) {
extraProperties = (Map) obj;
}
}
// Save the Rest Token...
if (extraProperties != null) {
session.putValue(REST_TOKEN, extraProperties.get("token"));
}
// Save the Subject...
session.putValue(SAVED_SUBJECT, clientSubject);
// Save the userName
session.putValue(USER_NAME, username);
}
try {
// Redirect...
String origRequest = (String)session.getAttribute(ORIG_REQUEST_PATH);
// Explicitly test for favicon.ico, as Firefox seems to ask for this on
// every page
if ((origRequest == null) || "/favicon.ico".equals(origRequest)) {
origRequest = "/index.jsf";
}
logger.log(Level.INFO, "Redirecting to {0}", origRequest);
response.sendRedirect(response.encodeRedirectURL(origRequest));
} catch (Exception ex) {
AuthException ae = new AuthException();
ae.initCause(ex);
throw ae;
}
// Continue...
return AuthStatus.SEND_CONTINUE;
} else {
int status = restResp.getResponseCode();
if (status == 403) {
request.setAttribute("errorText", GuiUtil.getMessage("alert.ConfigurationError"));
request.setAttribute("messageText", GuiUtil.getMessage("alert.EnableSecureAdmin"));
}
RequestDispatcher rd = request.getRequestDispatcher(this.loginErrorPage);