您好,欢迎访问三七文档
Java培训专家—传智播客培训专家—传智播客:单点登录作者:王健,如要转发,请注明出处:、使用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文件完成:Java培训专家—传智播客培训专家—传智播客节点,通过Cookie实现自动登录,必须配置的虚拟主页满足xxx.itcast.cn,即主域名必须保持一致。2、先在bbs(或是mail)虚拟目录下,开发一个可以自动登录的程序,使用Filter:1、登录的主页如下:%@pagelanguage=javaimport=java.util.*pageEncoding=UTF-8%%@tagliburi==c%htmlhead/headbodyp在同一台服务器上,多个站点自动登录....:%=session.getId()%/pc:iftest=${emptysessionScope.user}formname=fmethod=postaction=c:urlvalue='/login'/Name:inputtype=textname=name/br/Pwd:inputtype=textname=pwd/br/Java培训专家—传智播客培训专家—传智播客=checkboxname=chkvalue=7一周内自动登录br/inputtype=submitvalue=登录//form/c:ifc:iftest=${notemptysessionScope.user}欢迎你:${user}。ahref=c:urlvalue='/loginout'/安全退出/a/c:ifbr/相关站点:(只要在一边登录成功,即可以自动登录到另一个程序)br/ahref==、登录的Servlet程序如下:/***用户登录*/publicclassLoginServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{doPost(req,resp);}publicvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{Stringnm=req.getParameter(name);Stringpwd=req.getParameter(pwd);Stringchk=req.getParameter(chk);//是否选中了7天自动登录Java培训专家—传智播客培训专家—传智播客=/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天。Cookiecookie=newCookie(autologin,nm+@+pwd);cookie.setPath(/);//如果路径为/则为整个tomcat目录有用cookie.setDomain(.itcast.com);//设置对所有*.itcast.com为后缀的域名效if(chk!=null){inttime=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程序如下:/***自动登录*/Java培训专家—传智播客培训专家—传智播客{publicvoiddestroy(){}publicvoiddoFilter(ServletRequestreq,ServletResponseresp,FilterChainchain)throwsIOException,ServletException{System.err.println(开始自动登录验证.....);//此类中应该对登录的servlet直接放行。根据判断url决定。HttpServletRequestrequ=(HttpServletRequest)req;HttpSessions=requ.getSession();if(s.getAttribute(user)!=null){//如果用户已经登录则直接放行System.err.println(用户已经登录,没有必须要再做自动登录。。。。);}else{Cookie[]cookies=requ.getCookies();if(cookies!=null){for(Cookieck:cookies){if(ck.getName().equals(autologin)){//是否是自动登录。。。。System.err.println(自动登录成功。。。。。);Stringval=ck.getValue();String[]vals=val.split(@);s.setAttribute(user,vals[0]);}}}}chain.doFilter(req,resp);}publicvoidinit(FilterConfigfilterConfig)throwsServletException{}}Java培训专家—传智播客培训专家—传智播客、正常退出的Servlet如下/***安全退出删除Cookie*/publicclassLoginOutServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{HttpSessions=req.getSession();//获取SessionCookiecookie=newCookie(autologin,);//必须声明一个完全相同名称的Cookiecookie.setPath(/);//路径也要完全相同cookie.setDomain(.itcast.com);//域也要完全相同cookie.setMaxAge(0);//设置时间为0,以直接删除Cookieresp.addCookie(cookie);s.removeAttribute(user);System.err.println(安全退出。。。。。);resp.sendRedirect(req.getContextPath()+/index.jsp);}}5、关于自动登录的一些思考为了让单点登录,变成可配置的功能,可以将保存Cookie的代码,放到自动登录的Filter中实现。如果配置自动登录的Filter则同时实现闪单点登录,否则不加实现。Java培训专家—传智播客培训专家—传智播客、SSO示例程序配置在CAS的主页上,可以看到CAS服务器,和客户端配置的完整过程,根据提示,完全可以配置成功服务器和客户端。同时,在CAS上也可以找到服务器端的程序和客户端的程序,都是已经配置好的,对于初步学习来说,完全可以直接取来配置测试。以下就是直接使用CAS官方提供的示例服务器和示例客户端配置一个单点登录的示例:Jasig主页:培训专家—传智播客培训专家—传智播客培训专家—传智播客培训专家—传智播客第一步:先下载cas的服务器端支持包:cas-server3.xx.zip第二步:下载cas有客户端支持包。Cas-client.zipJava培训专家—传智播客培训专家—传智播客第三步:下载客户端的示例程序,这个不太好找。需要有点耐心以下是下载的超连接:第四步:解压cas-server.zip如下图,并从中找到服务器端war文件服务器端程序一般不用我们完成,但需要做一点小小的修改,cas的服务器端程序由spring+Springwebflow+cas写成。全部使用spring配置文件。它就是一个用户登录验证、发售票据的中心。相当于TicketOffice(售票处)。Java培训专家—传智播客培训专家—传智播客第五步:分别建立三个虚拟主机。一个是服务器主机,和两个客户端虚拟主机。1、修改etc/hosts文件:Java培训专家—传智播客培训专家—传智播客2、修改tomcat/conf/server.xml配置文件
三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:单点登录系统SSO
链接地址:https://www.777doc.com/doc-5014645 .html