,要求是由主系统增加一个从系统的链接,由主系统登录成功的用户可以直接点击该链接而登录到从系统,从系统只判断用户名称,不需要考虑密码,如果该用户在从系统使用的sqlserver数据库中存在的话就让其以他该有的角色登录到系统,如果不存在则让该用户以游客的身份自动登录从系统,不知道这个单点做得标不标准,反正是实现了客户的需要,可以说有点类单点吧,于是赶紧把经验总结下来,留以后用,也可以和有兴趣的朋友探讨一下.
最近由于项目需要做了一个类似单点的东西
我们要登录的是如下的一个统计信息平台,
首先现在列表中将这个链接作出来,链接指向的是放在主系统这边的一个jsp,这个jsp用来接收来至主系统的单点请求,接收到请求后在将请求发给从系统

(注意上图最下面的路径,该jsp是位于主系统上的)
该jsp源代码如下
<%
@ page contentType
=
"
text/html; charset=GBK
"
%>
<%
@page errorPage
=
"
/error.jsp
"
%>
<%
@ page
import
=
"
com.ideal.sso.*
"
%>
<%
@page
import
=
"
ideal.DataBase.*,
java.util.
*
"
%>
<
jsp:useBean id
=
"
qpwebService
"
class
=
"
ideal.DataBase.QpWebService
"
scope
=
"
session
"
/>
<%
String username
=
qpwebService.getUser().getUser_name()
==
null
?
""
:qpwebService.getUser().getUser_name();
%>
<
html
>
<
head
>
<
title
>
index
</
title
>
</
head
>
<
body bgcolor
=
"
#ffffff
"
>
<
form name
=
"
form1
"
method
=
"
post
"
action
=
"
http://***.***.***.***/ssologon.jsp?logonstyle=OOALOGON&username=<%=username%>
"
>
</
form
>
<
script language
=
"
javascript
"
>
form1.submit();
</
script
>
</
body
>
</
html
>
如代码所示我们接收到单点请求后,从Session中取出用户名(String username = qpwebService.getUser().getUser_name()==null?"":qpwebService.getUser().getUser_name();)
然后直接用脚本将请求转发到布置在从系统上的一个接收该请求的jsp,一个路径:
http://***.***.***.***/ssologon.jsp?logonstyle=OOALOGON&username=<%=username%>,告诉了从系统登录模式,和用户名(这里我们用OOALOGON标志味单点登陆请求,从系统接收到该参数后就知道是要进行单点登录了,不再验证用户的密码)
登录到上面的jsp后浏览器会自动跳转到下面的url:
在从系统
(上图为为进行单点登录时的登陆界面)
从系统的一个jsp文件接收到来自主系统的单点登录请求后讲进行系统的登录操作
Jsp的源代码如下
<%
@ page contentType
=
"
text/html; charset=GB2312
"
%>
<
html
>
<
head
>
<
title
>
ssologon
</
title
>
<
meta http
-
equiv
=
"
Content-Type
"
content
=
"
text/html; charset=gb2312
"
>
</
head
>
<%
String logonstyle
=
request.getParameter(
"
logonstyle
"
)
==
null
?
""
:request.getParameter(
"
logonstyle
"
);
String username
=
request.getParameter(
"
username
"
)
==
null
?
""
:request.getParameter(
"
username
"
);
%>
<
body bgcolor
=
"
#ffffff
"
>
<
table
>
<
tr
>
<
td
>
<
form name
=
"
form1
"
method
=
"
post
"
action
=
""
>
<
input type
=
"
hidden
"
name
=
"
logonstyle
"
value
=
"
<%=logonstyle%>
"
>
<
input type
=
"
hidden
"
name
=
"
user_name
"
value
=
"
<%=username%>
"
/>

<%
if
(request.getRemoteAddr().startsWith(
"
***.***.***
"
))
...
{ %>
<input name="userIP" type="hidden" value="<%=request.getRemoteAddr()%>">
<% }
%>
</
form
>
</
td
>
</
tr
>
</
table
>

<%
if
(logonstyle.equals(
"
OOALOGON
"
))
...
{
%>
<script language="JavaScript">
document.form1.logonstyle.value="1";
document.form1.action = "/login.do";
document.form1.submit();
</script>
<%
}
%>
</
body
>
</
html
>
上面的代码可以看出接收到请求后我们做的事情是将几个重要的值传给了从系统处理登录的servlet了, document.form1.logonstyle.value="1",从系统的登录的Servlet有考虑,如果传来的logonstyle为有值且为1则登录将不再考虑验证密码,只需考虑用户的用户名了(这段代码从略)
收到传过来的用户名明之后,查询获得该用户对应从系统中的相关身份后则直接登录到从系统,如下图,这样我们就简单的完成了一个单点登录操作了.
261

被折叠的 条评论
为什么被折叠?



