diff --git a/maxkey-core/src/main/java/org/maxkey/web/WebContext.java b/maxkey-core/src/main/java/org/maxkey/web/WebContext.java index ca85739acc27a17bc8dc38652b4e956808991cb2..faee14fca3e491740899e449b9f567570d9da584 100644 --- a/maxkey-core/src/main/java/org/maxkey/web/WebContext.java +++ b/maxkey-core/src/main/java/org/maxkey/web/WebContext.java @@ -322,6 +322,16 @@ public final class WebContext { return locale; } + + public static Map getRequestParameterMap(HttpServletRequest request) { + Map map = new HashMap(); + Map parameters = request.getParameterMap(); + for (String key : parameters.keySet()) { + String[] values = parameters.get(key); + map.put(key, values != null && values.length > 0 ? values[0] : null); + } + return map; + } /** * 根据名字获取cookie. diff --git a/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/CasAuthorizeEndpoint.java b/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/CasAuthorizeEndpoint.java index 23baca124d6372c58ff8a7b71e3c40b470b0c9c6..8eb99e8379e977eea36e2d69ad081846959eb420 100644 --- a/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/CasAuthorizeEndpoint.java +++ b/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/CasAuthorizeEndpoint.java @@ -21,6 +21,7 @@ package org.maxkey.authz.cas.endpoint; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -61,7 +62,7 @@ public class CasAuthorizeEndpoint extends CasBaseAuthorizeEndpoint{ casDetails=(casDetailsList!=null && casDetailsList.size()==1)?casDetailsList.get(0):null; - return buildCasModelAndView(casDetails); + return buildCasModelAndView(request,response,casDetails); } @@ -73,13 +74,20 @@ public class CasAuthorizeEndpoint extends CasBaseAuthorizeEndpoint{ AppsCasDetails casDetails=casDetailsService.getAppDetails(id); - return buildCasModelAndView(casDetails); + return buildCasModelAndView(request,response,casDetails); } - private ModelAndView buildCasModelAndView(AppsCasDetails casDetails){ + private ModelAndView buildCasModelAndView( + HttpServletRequest request, + HttpServletResponse response, + AppsCasDetails casDetails){ _logger.debug(""+casDetails); + WebContext.setAttribute( + CasConstants.PARAMETER.PARAMETER_MAP, + WebContext.getRequestParameterMap(request) + ); WebContext.setAttribute(CasConstants.PARAMETER.ENDPOINT_CAS_DETAILS, casDetails); WebContext.setAttribute(WebConstants.SINGLE_SIGN_ON_APP_ID, casDetails.getId()); WebContext.setAttribute(AuthorizeBaseEndpoint.class.getName(),casDetails); @@ -101,9 +109,23 @@ public class CasAuthorizeEndpoint extends CasBaseAuthorizeEndpoint{ callbackUrl.append("?"); } - callbackUrl.append(CasConstants.PARAMETER.TICKET).append("=").append(ticket) - .append("&") - .append(CasConstants.PARAMETER.SERVICE).append("=").append(casDetails.getService()); + //append ticket + callbackUrl.append(CasConstants.PARAMETER.TICKET).append("=").append(ticket); + + callbackUrl.append("&"); + //append service + callbackUrl.append(CasConstants.PARAMETER.SERVICE).append("=").append(casDetails.getService()); + + //增加可自定义的参数 + if(WebContext.getAttribute(CasConstants.PARAMETER.PARAMETER_MAP)!=null) { + @SuppressWarnings("unchecked") + Map parameterMap = (Map )WebContext.getAttribute(CasConstants.PARAMETER.PARAMETER_MAP); + parameterMap.remove(CasConstants.PARAMETER.TICKET); + parameterMap.remove(CasConstants.PARAMETER.SERVICE); + for (String key : parameterMap.keySet()) { + callbackUrl.append("&").append(key).append(parameterMap.get(key)); + } + } _logger.debug("redirect to CAS Client URL " + callbackUrl); diff --git a/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/ticket/CasConstants.java b/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/ticket/CasConstants.java index 82d22d454874eef5f638e16c41ff8bf99649832f..615640b96ab4adeee42fb48487fc18db3ffe78b4 100644 --- a/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/ticket/CasConstants.java +++ b/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/ticket/CasConstants.java @@ -23,6 +23,8 @@ public class CasConstants { public static final class PARAMETER{ public final static String ENDPOINT_CAS_DETAILS="CAS_AUTHORIZE_ENDPOINT_CAS_DETAILS"; + public final static String PARAMETER_MAP="CAS_AUTHORIZE_ENDPOINT_PARAMETER_MAP"; + /** Constant representing the ticket parameter in the request. */ public final static String TICKET="ticket";