Implemented redirect to reqeusted URI (last path) after login

This commit is contained in:
Mauro Mugnaini 2020-07-01 19:36:59 +02:00
parent 446286b77a
commit fad2ca8be0
2 changed files with 46 additions and 0 deletions

View File

@ -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;

View File

@ -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);
}
}
}
}