浏览代码

CAS Parameters Support

MaxKey 4 年之前
父节点
当前提交
ff5d2dfdb0

+ 10 - 0
maxkey-core/src/main/java/org/maxkey/web/WebContext.java

@@ -322,6 +322,16 @@ public final class WebContext {
 
         return locale;
     }
+    
+    public static Map<String, String> getRequestParameterMap(HttpServletRequest request) {
+        Map<String, String> map = new HashMap<String, String>();
+        Map<String, String[]> 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.

+ 28 - 6
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 <String, String> parameterMap = (Map <String, String>)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);
 		

+ 2 - 0
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";