用户登录,提交给loginServlet
<form action="${pageContext.request.contextPath }/servlet/LoginServlet?method=login" method="post">
记住用户名和两周内自动登录怎么写?
<tr>
<td colspan="2" style="text-align:center">
<input type="checkbox" name="checkbox" value="checkbox" />记住用户名
<input type="checkbox" name="autologin" value="auto" /> 两周内自动登录</td>
</tr>
LoginServlet处理提交的数据
public class LoginServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
String username = request.getParameter("username");
String password = request.getParameter("password");
if (username != null && password != null)
{
UserService service = new UserServiceImpl();
try
{
// A2 传入用户名和密码实现,找到对应user
User user = service.login(username, password);
// A4 如果用户点了自动登录,用Md5加密,保存到cookie,用户信息保存到session
String autologin = request.getParameter("autologin");
if (autologin != null)
{
String md5 = MD5Utils.getMD5(user.getPassword());
Cookie cookie = new Cookie("logininfo", user.getUsername() + "&" + md5);
cookie.setPath("/");
cookie.setMaxAge(60 * 60 * 24 * 14);//2周
response.addCookie(cookie);
System.out.println("cookie logininfo send" + user.getUsername() + "&" + md5);
}
// cookie属性为logininfo, session属性为user
request.getSession().setAttribute("user", user);
// A6 如果该用户是管理员,则这里应该跳转到管理员的后台管理界面
if ("admin".equals(user.getRole()))
{
// 保存在Session内
response.getWriter().println("登录成功,即将跳转到后台管理界面");
response.setHeader("refresh", "2;url="+ request.getContextPath() + "/admin/login/home.jsp");
}
else
{
// 否则跳转到主界面
response.getWriter().println("登录成功,即将跳转到主页");
response.setHeader("refresh", "2;url="+ request.getContextPath() + "/index.jsp");
}
}
catch (Exception e)
{
String eString = e.getMessage();
// 显示错误信息
request.setAttribute("user_login_msg", eString);
request.getRequestDispatcher("/login.jsp").forward(request,response);
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doGet(request, response);
}
}
service和Dao层查找数据
@Override
public User findUserusername(String username, String password)
{
QueryRunner queryRunner = new QueryRunner(C3P0DBUtils.getCpds());
User user = null;
try
{
user = queryRunner.query("select * from user where username= ? and password = ?", new BeanHandler<User>(User.class),
username,password
);
}
catch (SQLException e)
{
e.printStackTrace();
}
System.out.println("findUserusername"+user);
return user;
}
全局过滤器,用户访问登录界面的时候查看ssession,当用户登录成功之后,把下次自动登录需要的信息(用户名和密码),保存在cookie里,给浏览器。浏览器下次访问的时候,会把cookie(里面包含用户名和密码),带到服务器。服务器经过验证如果ok就直接登录
public class AutoLoginFilter implements Filter
{
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
// A7 遍历cookie 看看是否有携带自动登录的信息
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession(false);
if (session != null)
{
if (session.getAttribute("user") != null)
{
//拿到jsp
String requestURI = req.getRequestURI();
System.out.println("requestURI=" + requestURI);
int lastIndexOf = requestURI.lastIndexOf("/");
String substring = requestURI.substring(lastIndexOf + 1);
System.out.println("substring=" + substring);
if (substring.equals("login.jsp"))
{//如果一开始就是login.jsp自动转发到主页
req.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
}
else
{
//session中没有的话,到cookie中找
Cookie[] cookies = req.getCookies();
if (cookies != null)
{// cookie不为空
for (int i = 0; i < cookies.length; i++)
{
Cookie cookie = cookies[i];
if (cookie.getName().equals("logininfo"))
{
// 拿到cookie并切割
String logininfo = cookie.getValue();
String[] split = logininfo.split("&");
String username = split[0];
String password_md5 = split[1]; // hashcode
// 自动登录
UserService service = new UserServiceImpl();
try
{
// A8 cookie存在的话用md5加密,并把获得的user信息放入
User user = service.loginByMd5(username,password_md5);
if (user != null)
{//cookie里面存在用户信息,则保存到session
req.getSession().setAttribute("user", user);
System.out.println("auto login success!!");
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}
chain.doFilter(request, response);
}
}
web.xml中注册,注册的时候长报错,注意注册filter的mapping应该放在servlet前面
<filter>
<filter-name>autologin</filter-name>
<filter-class>com.cskaoyan.bookStore.web.filter.AutoLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>autologin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>