监听器、过滤器的常见应用

监听器、过滤器的常见应用

  • 用户登录后才能进入主页,注销后不能进入。

    1.用户登录之后,向Session中放入用户的数据

    2.进入主页的时候判断用户是否已登录;【在过滤器中实现】

img

其中的Constant.USER_SESSION是将字符串”user_session”变成一个静态常量,方便修改及复用

public class Constant {
    public final static String USER_SESSION = "USER_SESSION";
}
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="login" method="post">
    用户名:<input type="text" name="username">
    <input type="submit" value="login">
</form>
</body>
</html>

loginServlet

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        System.out.println("loginServlet执行");
        //获取前端请求的参数
        String username = req.getParameter("username");
        //处理简单的登录验证
        if ("admin".equals(username)){
            req.getSession().setAttribute(Constant.USER_SESSION,req.getSession().getId());
            req.getRequestDispatcher("success.jsp").forward(req, resp);
            // resp.sendRedirect("success.jsp");
        }else {
            // resp.sendRedirect("error.jsp");
            req.getRequestDispatcher("error.jsp").forward(req, resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

LoginFilter

public class LoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("登录拦截");
        //因为ServletHttp是接口,没有HttpServlet实现类的方法,因此需要向下转型
        HttpServletRequest req = (HttpServletRequest)servletRequest;
        HttpServletResponse resp = (HttpServletResponse)servletResponse;
        //获取Session
        Object userSession = req.getSession().getAttribute(Constant.USER_SESSION);
        //如果Session为空则认为是没有登录就访问主页,将会被过滤到error页面!
        if (userSession == null){
            req.getRequestDispatcher("error.jsp").forward(req, resp);
            // resp.sendRedirect("error.jsp");
        }
        filterChain.doFilter(req,resp);
    }

    @Override
    public void destroy() {

    }
}

web.xml中过滤器Filter

<filter>
  <filter-name>loginFilter</filter-name>
  <filter-class>com.saxon.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>loginFilter</filter-name>
  <url-pattern>/login/*</url-pattern>web.xml中注册Servlet以及过滤器Filter
</filter-mapping>
posted @ 2021-05-27 15:54  saxon宋  阅读(64)  评论(0)    收藏  举报