/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.user;
import java.net.URI;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.session.SessionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opengamma.util.auth.AuthUtils;
import com.opengamma.web.AbstractWebResource;
import com.opengamma.web.WebHomeResource;
/**
* RESTful resource for the logout page.
*/
@Path("/logout")
public class WebLogoutResource extends AbstractWebResource {
// take control of logout from Shiro for completeness
/** Logger. */
private static final Logger s_logger = LoggerFactory.getLogger(WebLogoutResource.class);
/**
* Creates the resource.
*/
public WebLogoutResource() {
}
//-------------------------------------------------------------------------
@GET
public Response get(
@Context HttpServletRequest hsr,
@Context UriInfo uriInfo,
@QueryParam("redirect") String redirectUri) {
redirectUri = StringUtils.trimToNull(redirectUri);
try {
AuthUtils.getSubject().logout();
hsr.getSession().invalidate();
} catch (SessionException ex) {
s_logger.debug("Ignoring session exception during logout", ex);
} catch (RuntimeException ex) {
s_logger.debug("Ignoring unexpected exception during logout", ex);
}
URI uri;
if (redirectUri != null) {
uri = uriInfo.getBaseUri().resolve(redirectUri);
} else {
uri = WebHomeResource.uri(uriInfo);
}
return Response.seeOther(uri).build();
}
@POST
public Response post(
@Context HttpServletRequest hsr,
@Context UriInfo uriInfo) {
// allow logout by POST for ease of use
return get(hsr, uriInfo, null);
}
//-------------------------------------------------------------------------
/**
* Builds a URI for this page.
*
* @param uriInfo the uriInfo, not null
* @return the URI, not null
*/
public static URI uri(UriInfo uriInfo) {
return uriInfo.getBaseUriBuilder().path(WebLogoutResource.class).build();
}
}