没有合适的资源?快使用搜索试试~ 我知道了~
对于现在很多的企业项目在开发和使用过程中都需要实现账号主战/主系统、子站/子系统通关登录,这个就是我们常说单点登录。前段时间项目中需要实现此功能,通过查找资料和网友的帮助,最终由朋友提供的这个资料,我认为是很好的干货,特此分享给大家,希望可以帮到大家对这个单点登录功能的实现和理解有所帮助。
资源推荐
资源详情
资源评论
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);
}
}
3、自动登录的 Filter 程序如下:
/**
* 自动登录
*/
public class AutoLogin implements Filter {
public void destroy() {}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
System.err.println("开始自动登录验证.....");//此类中应该对登录的servlet直接放行。根据判断url决定。
HttpServletRequest requ = (HttpServletRequest) req;
HttpSession s = requ.getSession();
if (s.getAttribute("user") != null) {//如果用户已经登录则直接放行
System.err.println("用户已经登录,没有必须要再做自动登录。。。。");
} else {
Cookie[] cookies = requ.getCookies();
if (cookies != null) {
for (Cookie ck : cookies) {
if (ck.getName().equals("autologin")) {// 是否是自动登录。。。。
System.err.println("自动登录成功。。。。。");
String val = ck.getValue();
String[] vals = val.split("@");
s.setAttribute("user", vals[0]);
}
}
}
}
chain.doFilter(req, resp);
}
public void init(FilterConfig filterConfig) throws ServletException {}
}
4、正常退出的 Servlet 如下
/**
* 安全退出删除Cookie
*/
public class LoginOutServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession s = req.getSession(); //获取Session
Cookie cookie = new Cookie("autologin","");//必须声明一个完全相同名称的Cookie
cookie.setPath("/");//路径也要完全相同
cookie.setDomain(".itcast.com");//域也要完全相同
cookie.setMaxAge(0);//设置时间为0,以直接删除Cookie
resp.addCookie(cookie);
s.removeAttribute("user");
System.err.println("安全退出。。。。。");
resp.sendRedirect(req.getContextPath()+"/index.jsp");
}
}
5、关于自动登录的一些思考
为了让单点登录,变成可配置的功能,可以将保存 Cookie 的代码,放到自动登录的 Filter 中实现。
如果配置自动登录的 Filter 则同时实现闪单点登录,否则不加实现。
2、SSO 示例程序配置
在 CAS 的主页上,可以看到 CAS 服务器,和客户端配置的完整过程,根据提示,完全可以配置成功服务器和客户端。同时,在 CAS 上也可以找到服务器端的程序和
剩余52页未读,继续阅读
资源评论
云舜言传
- 粉丝: 25
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功