DI、ESB系统单点登录

2年前

DI、ESB系统单点登录

访问普元产品知识库(doc.primeton.com),查看本文原文,获得更多普元产品知识,点击此处


最终效果:

     

其它系统嵌入dimanager应用时只需要在url后添加userId即可进入/digov/home/index.jsp页面,不需要再次登录。

多种实现方式:

 

                1.直接修改login.jsp  (需要传入用户名及密码,如果是默认密码则只需传用户名即可)

                           优点:修改方便,直接修改jsp就行不需要重启服务器即可生效。

                           缺点:如果用户修改过di的密码,那则需要在嵌入di时传入密码。相对不安全

                2.增加拦截器(访问应用下任意.jt地址传入用户名,直接进入登录后页面)

                          优点:不需要知道用户的密码,只传入用户名即可实现单点登录。

                          缺点:需要重启服务器才能生效。

 

1)直接修改login.jsp的方式实现步骤如下:

打开/coframe/auth/login/login.jsp,增加userName及password参数获取的代码。


js中增加自动提交代码


访问http://127.0.0.1:8080/dimanager/coframe/auth/login/login.jsp?userId=sysadmin&password=000000直接进入登录后页面

2)增加拦截器方式实现步骤如下:

2.1 将LoginCAPortalCheckUser打成jar传到项目的WEB-INF\lib下

loginCAPortalCheckUser源代码:

package org.gocom.components.coframe;  import java.io.IOException;  import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;  import com.eos.access.http.OnlineUserManager; import com.eos.data.datacontext.IUserObject; import com.eos.data.datacontext.UserObject; import com.primeton.cap.party.manager.PartyManagerServiceLoader;  public class LoginCAPortalCheckUser implements Filter {  	public void doIntercept(HttpServletRequest request, 			HttpServletResponse response, FilterChain interceptorChain) 			throws IOException, ServletException { 		try {             String openUrl=""; 			request.setCharacterEncoding("utf-8"); 			String ip = request.getHeader("x-forwarded-for"); 			if ((ip == null) || (ip.length() == 0) 					|| ("unknown".equalsIgnoreCase(ip))) { 				ip = request.getHeader("Proxy-Client-IP"); 			} 			if ((ip == null) || (ip.length() == 0) 					|| ("unknown".equalsIgnoreCase(ip))) { 				ip = request.getHeader("WL-Proxy-Client-IP"); 			} 			if ((ip == null) || (ip.length() == 0) 					|| ("unknown".equalsIgnoreCase(ip))) { 				ip = request.getRemoteAddr(); 			} 			HttpSession session = request.getSession();  			String userId = request.getParameter("userId"); 			if (userId != "") { 				System.out.println("=============="); 				System.out.println(ip+"-登录用户为:" + userId); 				System.out.println("=============="); 				String clientId = "default"; 				UserObject userObj =((UserObject)PartyManagerServiceLoader.getCurrentPartyUserInitService().initUserObject(userId, clientId));                 if(null!=userObj){ 				session = request.getSession(); 				session.setAttribute(IUserObject.KEY_IN_CONTEXT, userObj); 				OnlineUserManager.login(userObj); // eos登录必须的步骤 				session.setAttribute("language", "zh_CN"); // 语言 				session.setAttribute("locale", "zh_CN"); // 语言 				   openUrl="/digov/home/index.jsp";                 }else{                 	openUrl="/coframe/auth/login/login.jsp";                 } 			} else { 				System.out.print("用户验证失败,请检查url"); 				openUrl="/coframe/auth/login/login.jsp"; 			} 			request.getRequestDispatcher(openUrl).forward(request, response);  		} catch (Exception e) { 			e.printStackTrace(); 		}  	}  	/** 	 * 记录用户进入或登录系统审计 	 * 	 * @param acOperator 	 */  	public void destroy() { 	}  	public void doFilter(ServletRequest request, ServletResponse response, 			FilterChain interceptorChain) throws IOException, ServletException { 		doIntercept((HttpServletRequest) request, 				(HttpServletResponse) response, interceptorChain); 	}  	public void init(FilterConfig arg0) throws ServletException {  	}  } 

2.2 修改web.xml,增加filter


2.3 访问http://127.0.0.1:8080/dimanager/login.jt?userId=sysadmin直接进入登录后页面。

ESB的单点方式与DI的大致相同,附件为di及esb的单点部署包可直接使用。

 

附件下载:DsbAndDi-sso.zip

 

DsbAndDi-sso.zip

COMMENTS

需要 后方可回复
如果没有账号可以 一个帐号。