• JavaWeb 之 Filter 验证用户登录案例


    需求:

    1、 访问一个网站的资源。验证其是否登录
    2、 如果登录了,则直接放行。
    3、 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录"。

    代码实现:

     1 import javax.servlet.*;
     2 import javax.servlet.annotation.WebFilter;
     3 import javax.servlet.http.HttpServletRequest;
     4 import java.io.IOException;
     5 
     6 @WebFilter("/*") // 拦截所有的访问
     7 public class LoginFilter implements Filter {
     8     public void destroy() {
     9     }
    10 
    11     public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    12         // 强转为HttpServletRequest 对象
    13 
    14         HttpServletRequest request = (HttpServletRequest) req;
    15         // 1 .获取资源请求路径
    16         String uri = request.getRequestURI();
    17 
    18         // 2 判断是否包含登录相关资源路径
    19         // login.jsp,要排除图片,验证码等资源
    20         if(uri.contains("/login.jsp") || uri.contains("/loginServlet") || uri.contains("/css/") || uri.contains("/js/") || uri.contains("/fonts/") || uri.contains("/checkCodeServlet")) {
    21             // 包含,用户想登录,放行与登录相关的资源
    22             chain.doFilter(req, resp);
    23         } else {
    24             // 不包含,验证用户是否登录
    25             // 3 从session 中获取 user
    26             Object user = request.getSession().getAttribute("user");
    27 
    28             if(user != null) {
    29                 // 登录成功,放行
    30                 chain.doFilter(req,resp);
    31             } else {
    32                 request.setAttribute("login_msg","尚未登录,请登录");
    33                 request.getRequestDispatcher("/login.jsp").forward(request,resp);
    34             }
    35         }
    36 
    37 
    38     }
    39 
    40     public void init(FilterConfig config) throws ServletException {
    41 
    42     }
    43 
    44 }
  • 相关阅读:
    【BZOJ3489】A simple rmq problem【kd树】
    【BZOJ2716】天使玩偶【kd树】
    Codeforces Round #520 (Div. 2)
    Codeforces Round #521 (Div. 3)
    Educational Codeforces Round 54
    【hdu3507】Print Article 【斜率优化dp】
    【HDU5992】Finding Hotels 【KD树】
    【hdu4347】The Closest M Points 【KD树模板】
    【BZOJ2806】Cheat 【广义后缀自动机+单调队列优化dp+二分】
    SDSC2018 Day1
  • 原文地址:https://www.cnblogs.com/niujifei/p/11628048.html
Copyright © 2020-2023  润新知