单点登录(一)使用Cookie+File实现单点登录
2015-07-14 22:33
411 查看
本文使用Cookies+Filter实现www.taobao.tgb.com 和 www.tianmao.tgb.com的单点登录。
2.访问网址时,不需要输入端口号。
此时刷新tianmao网页,可直接显示:欢迎界面(无需登录)
此处可以查看到:
为tgb.com保存了一份cookie
为taobao保存了一份session
为tianmao保存了一份session
1.本例使用tomcat做服务器,绑定1个域名,且此域名对应2个不同的项目:一个是taobao,另一个是tianmao。
2.访问网址时,不需要输入端口号。
此处需要在tomcat安装目录中,新建两个文件夹:taobao、tianmao(如图所示)
后把MyEclipse中的WEB-INF整个文件夹拷贝至taobao和tianmao文件夹中,并更改WEB-INF名称为ROOT
2.修改C:\Windows\System32\drivers\etc\hosts文件,并添加两个节点
3.修改C:\tomcat\apache-tomcat-6.0.35\conf\server.xml文件,并添加两个Host节点
到此为止:
若要访问taobao,则需要浏览器中输入:www.taobao.tgb.com:8080
若需要访问tianmao,则需要浏览器中输入:www.tianmao.tgb.com:8080
原来:
修改后:
参考文章:《tomcat多域名配置》
源码分享:链接: http://pan.baidu.com/s/1eQheDpS 密码: gn9d
一 实现原理
使用用户名和密码登录taobao后,会将用户名存储在Session和Cookie中各一份。当用户登录tianmao时,可直接从Cookie中获取用户名和密码,不需要二次登陆。二 知识点解析
1.本例使用tomcat做服务器,绑定1个域名,且此域名对应2个不同的项目:一个是taobao,另一个是tianmao。2.访问网址时,不需要输入端口号。
三 步骤:
一)利用MyEclipse创建Web Service Project,名称为:sso_cookie_filter,项目目录结构
二)index.jsp用户登录页
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <title>欢迎使用[tianmao]网站</title> </head> 欢迎使用[tianmao]网站<br><br> <body> <c:choose> <c:when test="${not empty sessionScope.user}"> 欢迎你:${sessionScope.user} </c:when> <c:otherwise> 你还没有登录,请先登录: <form action="<%=path%>/login" method="post"> userName:<input type="text" name="userName"><br> password:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> </c:otherwise> </c:choose> </body> </html>
三)web.xml用于配制:拦截器、Servlet
<!-- 开始:赵栗婧-创建Filter过滤器,用于拦截所有的请求--> <filter> <filter-name>autoLogin</filter-name> <filter-class>com.tgb.sso.filter.AutoLoginFilter</filter-class> </filter> <filter-mapping> <filter-name>autoLogin</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 结束:赵栗婧-创建Filter过滤器,用于拦截所有的请求--> <!-- 开始:赵栗婧-创建Servlet--> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.tgb.sso.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <!-- 结束:赵栗婧-创建Servlet-->
四)编写过滤器:AutoLoginFilter.java
/** * 自定义过滤器:用户拦截用户登录信息 * * @author lizi * @version 1.0.0 2015年7月14日19:29:45 */ public class AutoLoginFilter implements Filter { // 拦截所有用户请求。 // 首先判断session中是否存在用户名。 // 若session中不存在用户名,则判断Cookies中是否存在用户名 // 若Cookie中存在用户名,则将其放在session中。 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { // 拦截用户请求 HttpServletRequest request = (HttpServletRequest) req; // 判断session中,是否为空 // 若session中user为空, if (request.getSession().getAttribute("user") == null) { // 获取request中所有的Cookie,并放在数组中 Cookie[] cs = request.getCookies(); // 若Cookie不为空,则遍历所有的Cookie中所有的记录 if (cs != null && cs.length > 0) { for (Cookie c : cs) { String cName = c.getName(); // 查找当前用户的Cookie(此处为sso标识) if (cName.equals("sso")) { // 获取sso中对应的值,即:用户名userName String userName = c.getValue(); // 把用户名userName放在session中 request.getSession().setAttribute("user", userName); } } } } // 返回当前的请求 chain.doFilter(request, resp); } }
五)编写Servlet:LoginServlet.java
/** * 用户登录Servlet * * @author lizi * @version 1.0.0 2015年7月14日19:29:45 */ public class LoginServlet extends HttpServlet { // 若用户提交的是Get请求,则将此请求转发给doPost public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } // 接受用户的Post请求 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户输入的用户名 String userName = request.getParameter("userName"); // 获取用户输入的面 String password = request.getParameter("password"); // 若用户名和密码一致,则登录成功(此处实际上,应该查询数据库) if (userName != null && password != null) { if (userName.equals(password)) { // 把用户名存储在session中 request.getSession().setAttribute("user", userName); // 向客户端写入cookie,名为为sso Cookie c = new Cookie("sso", userName); c.setMaxAge(3600);// 设置cookie有效时间为1小时 c.setDomain(".tgb.com");// www.taobao.tgb.com // www.tianmao.tgb.com c.setPath("/");// 拦截所有的请求 response.addCookie(c);// 把cookie添加到response中 } } // 跳转到index.jsp页面 response.sendRedirect(request.getContextPath() + "/index.jsp"); } }
六)Demo效果
在taobao网站中输入:用户名为taobao ,密码为taobao ,后点击登录。后显示:欢迎界面此时刷新tianmao网页,可直接显示:欢迎界面(无需登录)
七)查看360浏览器中的Cookie:
工具-->选项-->高级设置-->内容设置(内容设置...)-->Cookie(所有Cookie和网站数据)此处可以查看到:
为tgb.com保存了一份cookie
为taobao保存了一份session
为tianmao保存了一份session
四 拓展知识
以往把项目直接部署在tomcat中,然后通过:localhost:8080/projectname/methodname进行访问。1.本例使用tomcat做服务器,绑定1个域名,且此域名对应2个不同的项目:一个是taobao,另一个是tianmao。
2.访问网址时,不需要输入端口号。
一)通过域名进行访问(www.taobao.tgb.com 、 www.tianmao.tgb.com),则需要做如下配置:
1.tomcat默认的启动的项目目录是:tomcat\webapps。此处需要在tomcat安装目录中,新建两个文件夹:taobao、tianmao(如图所示)
后把MyEclipse中的WEB-INF整个文件夹拷贝至taobao和tianmao文件夹中,并更改WEB-INF名称为ROOT
2.修改C:\Windows\System32\drivers\etc\hosts文件,并添加两个节点
3.修改C:\tomcat\apache-tomcat-6.0.35\conf\server.xml文件,并添加两个Host节点
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"></Host> <!--开始:赵栗婧-添加两个Host节点:用于tomcat默认访问的目录--> <Host appBase="taobao" autoDeploy="true" name="www.taobao.tgb.com" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"></Host> <Host appBase="tianmao" autoDeploy="true" name="www.tianmao.tgb.com" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"></Host> <!--结束:赵栗婧-添加两个Host节点:用于tomcat默认访问的目录-->
到此为止:
若要访问taobao,则需要浏览器中输入:www.taobao.tgb.com:8080
若需要访问tianmao,则需要浏览器中输入:www.tianmao.tgb.com:8080
二)访问时,去掉端口号8080呢?
修改C:\tomcat\apache-tomcat-6.0.35\conf\server.xml文件,中HTTP的端口号,由8080--->80原来:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
修改后:
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443"/>
参考文章:《tomcat多域名配置》
相关文章推荐
- Ps常用快捷键
- 【工业串口和网络软件通讯平台(SuperIO)教程】一.通讯机制
- WIN10系统32,64位系统自动激活版
- 立方和等式
- 互联网搜索广告介绍(二)
- 菜鸟学习c++—实现简单的冒泡排序和插入排序算法
- 如何提高利用视频学习的学习效率—— Swift
- WordPress详细安全设置
- officetohtml
- 【剑指offer】和为S的连续整数序列
- 哈工大操作系统实验3—进程管理
- 黑马程序员----集合框架工具类,几个新特性
- 硬币存钱
- 简单的.NET三层框架的实现(学生作业管理系统)
- Linux下将Apache(httpd)新增为系统服务及开机自启动
- Mac下安装java环境
- JS模块化编程
- Linux:安装双系统(Win7+Ubuntu)后,Ubuntu正常,Win7无法启动,有需要的朋友可以参考下
- Reverse Nodes in k-Group
- 如何使电脑彻底崩溃!!!!(不要干坏事哦)