关于sso,我在获取Assertion,怎么获取的是null
发布网友
发布时间:2022-04-25 01:22
我来回答
共1个回答
热心网友
时间:2023-10-19 09:04
SSO
:单点登录
1
、使用
Cookie
解决单点登录
技术点:
1
、设置
Cookie
的路径为
setPath("/") .
即
Tomcat
的目录下都有效
2
、设置
Cookie
的域
setDomain(".itcast.com");
即
bbs.itcast.com,
或是
mail.itcast.com
有效。即跨域。
3
、设置
Cookie
的时间。即使用户不选择在几天内自动登录,也应该保存
Cookie
以保存在当前浏览器没有关闭的情况下有效。
4
、使用
Filter
自动登录。
实现步骤:
1
、首先要准备出几个虚拟主机并配置
hosts
文件,即本机
DNS
。
配置虚拟主机,主要通过修改
tomcat_home/conf/server.xml
文件完成:
增加几个
Host
节点,通过
Cookie
实现自动登录,必须配置的虚拟主页满足
xxx.itcast.cn
,即主域名必须保持一致。
2
、先在
bbs
(或是
mail
)虚拟目录下,开发一个可以自动登录的程序,使用
Filter
:
1
、登录的主页如下
:
<%@
page
language
=
"java"
import
=
"java.util.*"
pageEncoding
=
"UTF-8"
%>
<%@
taglib
uri
=
"http://java.sun.com/jsp/jstl/core"
prefix
=
"c"
%>
<
html
>
<
head
>
</
head
>
<
body
>
<
p
>
在同一台服务器上,多个站点自动登录
....>>:
<%=
session.getId()
%>
</
p
>
<
c:if
test
="${
empty
sessionScope.user}"
>
<
form
name
=
"f"
method
=
"post"
action
=
"
<
c:url
value
=
'/login'
/>
"
>
Name
:
<
input
type
=
"text"
name
=
"name"
/><
br
/>
Pwd
:
<
input
type
=
"text"
name
=
"pwd"
/><
br
/>
<
input
type
=
"checkbox"
name
=
"chk"
value
=
"7"
>
一周内自动登录
<
br
/>
<
input
type
=
"submit"
value
=
"
登录
"
/>
</
form
>
<
/
c:if
>
<
c:if
test
="${
not empty
sessionScope.user}"
>
欢迎你
:${user}
。
<
a
href
=
"
<
c:url
value
=
'/loginout'
/>
"
>
安全退出
</
a
>
<
/
c:if
>
<
br
/>
相
关站点:(只要在一边登录成功,即可以自动登录到另一个程序)
<
br
/>
<
a
href
=
"http://mail.itcast.com:7777"
>
mail.itcast.com
</
a
><
br
/>
<
a
href
=
"http://bbs.itcast.com:7777"
>
bbs.itcast.com
</
a
><
br
/>
</
body
>
</
html
>
2
、登录的
Servlet
程序如下:
/**
*
用户登录
*/
public
class
LoginServlet
extends
HttpServlet{
public
void
doGet(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
doPost(req, resp);
}
public
void
doPost(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
String nm = req.getParameter(
"name"
);
String pwd = req.getParameter(
"pwd"
);
String chk = req.getParameter(
"chk"
);
//
是否选中了
7
天自动登录
String forward =
"/index.jsp"
;
if
(nm!=
null
&& !nm.trim().equals(
""
) && nm.startsWith(
"it"
)
//
用户名是
it
开始,且密码是
pwd
开始的可以登录
&& pwd !=
null
&& !pwd.trim().equals(
""
) &&
pwd.startsWith(
"pwd"
)){
System.
err
.println(
"
登录成功。。。。。
"
);
forward =
"/jsps/welcome.jsp"
;
//
无论如何,都要设置
cookie,
如果没有选择自动登录,则只在当前页面的跳转时有效,否则设置有效期间为
7
天。
Cookie cookie =
new
Cookie(
"autologin"
,nm+
"@"
+pwd);
cookie.setPath(
"/"
);
//
如果路径为
/
则为整个
tomcat
目录有用
cookie.setDomain(
".itcast.com"
);
//
设置对所有
*.itcast.com
为后缀的域名效
if
(chk!=
null
){
int
time = 1*60*60*24*7;
//1
秒
*60=1
分
*60
分
=1
小时
*24=1
天
*7=7
天
cookie.setMaxAge(time);
}
resp.addCookie(cookie);
req.getSession().setAttribute(
"user"
, nm);
}
else
{
System.
err
.println(
"
登录不成功。。。。。。
"
);
}
req.getRequestDispatcher(forward).forward(req, resp);
}
}