现有4个Web系统,各自独立,IE中输入登录IP+端口显示登录页面,登录页面中输入用户名、密码,验证码(随机)则登录到各个系统中。
现在需要提供一个独立的统一登录页面,登录页面要求输入:用户名,密码,验证码(随机),成功登录后页面提供上面4个Web系统的连接,点击连接,则自动跳过各个系统的登录页面,直接登录到系统内部。
要求:1)4个Web应用程序不能修改;
2)统一登录的用户名,密码与上面4个Web系统的密码相同。
3)各个应用程序之间,与统一登录之间分别部署不同机器。我的实现思路:
通过xml文件配置各个应用程序的ip和port;
将登录页面隐藏,自动填写用户名、密码,验证码(不知道能否实现?如何实现?)
统一登录控制自动提交(不知道能否实现?如何实现?)
请各位大侠帮忙看看这个功能可以实现吗?实现思路可取吗?如果能实现的话采用哪些相关技术呢?
现在需要提供一个独立的统一登录页面,登录页面要求输入:用户名,密码,验证码(随机),成功登录后页面提供上面4个Web系统的连接,点击连接,则自动跳过各个系统的登录页面,直接登录到系统内部。
要求:1)4个Web应用程序不能修改;
2)统一登录的用户名,密码与上面4个Web系统的密码相同。
3)各个应用程序之间,与统一登录之间分别部署不同机器。我的实现思路:
通过xml文件配置各个应用程序的ip和port;
将登录页面隐藏,自动填写用户名、密码,验证码(不知道能否实现?如何实现?)
统一登录控制自动提交(不知道能否实现?如何实现?)
请各位大侠帮忙看看这个功能可以实现吗?实现思路可取吗?如果能实现的话采用哪些相关技术呢?
如果不需要输入验证码,可以实现吗?
所以至少你得把原来系统的身份验证修改才行~`
我可以直接调用Web应用程序的Login.do(确定按钮),然后帮他把Session保存起来吗?
Web应用的Session是保存在哪里的?
我想应该改动不大吧
然后做一个统一的登录转发模块,单独部署在一台应用上,然后所有的请求都通过该模块转发,就类似集群中的前端代理。当然还包括各应用的session同步,这应该可以通过系统设置解决。
只是个想法,不知道行不行,可不可实现。
各个系统直接提供一个统一登录的API还是修改各自的Session?哪个方法更简单一些,对Web应用的改动最小?
第一个页面获取登陆必须的参数 保存在SESSION 或者下个页面中
第2个页面 提供4个登陆选择 处理就是 POST或者 GET 那4个登陆页面的
URLConnection connection = url.openConnection();使用URL.openConnection()的方式等同于通过页面访问,问题在于验证码是服务器端生成的,在系统之外你无法获得验证码,因此需要上面的登录之前获得各系统的验证码,通过抓取页面html代码来解析出验证码,抓取html大致如下: URL url = new URL(urlStr);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
InputStreamReader isr = new InputStreamReader(httpConn.getInputStream());
BufferedReader br = new BufferedReader(isr);
StringBuffer html = new StringBuffer();
String temp;
while ((temp = br.readLine()) != null) {
html.append(temp);
}
br.close();
isr.close();
Finance //财务系统
Administration //行政系统
Personnel //人事系统
ACL //验证模块建立用户映射表
ACLLoginID,FinanceLoginID,AdministrationLoginID,PersonnelLoginID,AuthoritySessionCode进入子系统采用
http://Finance.company.com/AutoAuthority.do?LoginID=<%=ACL.getFinanceLoginID() %>&sess=<%=ACL.getAutoritySessionCode() %>或者将AuthoritySessionCode存储到cookie中,且expires设为浏览器进程