1. 项目结构
2. 主要说明
IndexServlet 处理项目运行首页,如果用户已登录则重定向到欢迎界面 index.jsp,用户未登录则重定向到 login.jsp进行登录
LoginServlet 处理登录请求,用户名 == 密码时登录成功,并新建Cookie:
String username = req.getParameter("username");
String password = req.getParameter("password");
if (null != username && username.equals(password)) {
HttpSession session = req.getSession();
session.setAttribute("user", username);
Cookie ck = new Cookie("sso", username);
ck.setDomain("dtdream.com");
ck.setPath("/");
ck.setMaxAge(3600);
resp.addCookie(ck);
resp.sendRedirect("index");
}
AutoLoginFilter 过滤所有请求,解析cookie,当cookie中携带有登录信息,则 取出放进session中,实现用户自动登录
HttpSession session = request.getSession();
if (null == session || null == session.getAttribute("user")) {
Cookie[] cookies = request.getCookies();
if (null != cookies) {
for (Cookie cookie : cookies) {
String cookieName = cookie.getName();
if ("sso".equals(cookieName)) {
session.setAttribute("user", cookie.getValue());
}
}
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<filter>
<filter-name>autoLoginFilter</filter-name>
<filter-class>com.dtdream.dmall.servlet.AutoLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>autoLoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>indexServlet</servlet-name>
<servlet-class>com.dtdream.dmall.servlet.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>indexServlet</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>com.dtdream.dmall.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
3. 配置与测试:为实现cookie的共享子域必须相同
host文件修改:
127.0.0.1 bbs.dtdream.com
127.0.0.1 news.dtdream.com
tomcat server.xml配置修改,创建基于域名的虚拟主机:
<Host name="bbs.dtdream.com" appBase="bbs"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="news.dtdream.com" appBase="news"
unpackWARs="true" autoDeploy="true">
</Host>