Implemented redirect to reqeusted URI (last path) after login
This commit is contained in:
parent
446286b77a
commit
fad2ca8be0
|
@ -22,6 +22,8 @@ public class OpenIdConnectLoginFilter extends BaseFilter {
|
|||
|
||||
protected static final Log log = LogFactoryUtil.getLog(OpenIdConnectLoginFilter.class);
|
||||
|
||||
public static final String REDIRECT_ATTRIBUTE = "redirect-after-login-to";
|
||||
|
||||
public OpenIdConnectLoginFilter() {
|
||||
super();
|
||||
if (log.isDebugEnabled()) {
|
||||
|
@ -62,6 +64,13 @@ public class OpenIdConnectLoginFilter extends BaseFilter {
|
|||
JWTTokenUtil.putOIDCInRequest(token, request);
|
||||
// The auto login class will perform the portal auto login using the token
|
||||
} else {
|
||||
String redirect = getRedirect(request);
|
||||
if (redirect != null) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Setting orginal reqeusted URI in session: " + redirect);
|
||||
}
|
||||
session.setAttribute(REDIRECT_ATTRIBUTE, redirect);
|
||||
}
|
||||
String oidcRedirectURL = OpenIdConnectRESTHelper.buildLoginRequestURL(
|
||||
configuration.getAuthorizationURL(), request.getServerName(), sessionId,
|
||||
request.getRequestURL().toString());
|
||||
|
@ -73,9 +82,31 @@ public class OpenIdConnectLoginFilter extends BaseFilter {
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
processFilter(getClass(), request, response, filterChain);
|
||||
}
|
||||
|
||||
private String getRedirect(HttpServletRequest request) {
|
||||
if (log.isTraceEnabled()) {
|
||||
log.trace("Getting redirect parameter");
|
||||
}
|
||||
String redirect = request.getParameter("redirect");
|
||||
if (redirect == null) {
|
||||
if (log.isTraceEnabled()) {
|
||||
log.trace("Redirect parameter is null, trying with p_p_id and related redirect parameter");
|
||||
}
|
||||
String ppId = request.getParameter("p_p_id");
|
||||
if (ppId != null) {
|
||||
String redirectParamName = "_" + ppId + "_";
|
||||
if (log.isTraceEnabled()) {
|
||||
log.trace("Getting numbered redirect parameter: " + redirectParamName);
|
||||
}
|
||||
redirect = request.getParameter(redirectParamName);
|
||||
}
|
||||
}
|
||||
return redirect;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Log getLog() {
|
||||
return log;
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
package org.gcube.portal.oidc.lr62;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URLDecoder;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
@ -37,6 +40,18 @@ public class PostLoginAction extends Action {
|
|||
log.info("Setting OIDC token in session");
|
||||
JWTTokenUtil.putOIDCInSession(token, session);
|
||||
}
|
||||
String redirect = (String) session.getAttribute(OpenIdConnectLoginFilter.REDIRECT_ATTRIBUTE);
|
||||
if (redirect != null) {
|
||||
session.removeAttribute(OpenIdConnectLoginFilter.REDIRECT_ATTRIBUTE);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Redirecting to the original requested URI: " + redirect);
|
||||
}
|
||||
try {
|
||||
response.sendRedirect(URLDecoder.decode(redirect, "UTF-8"));
|
||||
} catch (IOException e) {
|
||||
new ActionException("Redirecting to original requested URI", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue