4.1过滤器和监听器——过滤器案例,实现自动登录功能。

JAVAWEB学习文章索引点击这里
效果:进入主页,判断是否登录,如果没有登录则可点击跳转到登录页面,如果登录了,就显示欢迎,并且有注销选项。登陆后,判断账号密码,是否正确,若正确则写入session、cookie,并返回主页,如果不正确返回登录页面,并提示登录错误。如果点击注销按钮,修改cookie,清除掉session中内容。正确登陆后,关闭浏览器,重新打开浏览器,直接访问主页url,发现可以直接显示登录成功页面。
注意事项:确保浏览器打开了cookie功能,并且关闭浏览器后不会自动清除cookie
主页:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:choose>
    <c:when test="${empty sessionScope.user}">
    <a href="${pageContext.request.contextPath}/login.jsp">请进行登录</a>
    </c:when>
    <c:otherwise>
        欢迎你,${sessionScope.user.username}。
        <a href="${pageContext.request.contextPath }/LogoutServlet">注销</a>
    </c:otherwise>
</c:choose>
</body>
</html>

登录页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${requestScope.errMsg}
<hr/>
<form method="post" action="LoginServlet">
    账号:<input name="username" value="abc"/><br/>
    密码:<input name="password" value="123"/><br/>
    自动登录<input  name="isauto" type="radio" value="${60*60*24}"/>
    <input type="submit" value="登录"> 
</form>
</body>
</html>

登录处理

package com.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.bean.User;

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取传递过来的参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String isauto = request.getParameter("isauto");
        //判断是否正确
        if("abc".equals(username) && "123".equals(password)) {
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            request.getSession().setAttribute("user", user);
            //如果需要自动登录,为其配置cookie
            if(isauto != null) {
                Cookie cookie = new Cookie("autologin", username+"-"+password);
                cookie.setMaxAge(Integer.parseInt(isauto));
                cookie.setPath(request.getContextPath());
                response.addCookie(cookie);
            }
            response.sendRedirect(request.getContextPath()+"/index1.jsp");
        }
        else {
            //账号密码不正确,请求转发到登录页面
            request.setAttribute("errMsg", "用户名或密码错误");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

注销处理

package com.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/LogoutServlet")
public class LogoutServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //清除掉session
        request.getSession().removeAttribute("user");
        //修改掉客户端的cookie
        Cookie cookie = new Cookie("autologin", "aaa");
        cookie.setPath(request.getContextPath());
        cookie.setMaxAge(0);
        response.addCookie(cookie);
        //重定向到index
        response.sendRedirect(request.getContextPath()+"/index1.jsp");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

主页过滤器

package com.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

import com.bean.User;

@WebFilter("/index1.jsp")
public class AuLoginFilter implements Filter {

    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)req;
        //获取cookie
        Cookie[] cookies = request.getCookies();
        if(cookies!=null) {
            String autologin = null;
            for(int i = 0; i < cookies.length; i++) {
                //寻找需要的cookie
                if("autologin".equals(cookies[i].getName())) {
                    autologin = cookies[i].getValue();
                    String[] parts = autologin.split("-");//字符串切割
                    String username = parts[0];
                    String password = parts[1];
                    //如果账号密码正确,则默认登录了
                    if("abc".equals(username) && "123".equals(password)) {
                        User user = new User();
                        user.setUsername(username);
                        user.setPassword(password);
                        request.getSession().setAttribute("user", user);
                    }
                    break;
                }
            }
        }
        chain.doFilter(request, response);
    }

    public void init(FilterConfig fConfig) throws ServletException {
    }

}

猜你喜欢

转载自blog.csdn.net/smallhc/article/details/80821261