java 使用过滤器实现登录拦截处理

Java使用过滤器实现登录拦截处理,可以基于Servlet的过滤器实现,这种方式可以在不改变原有代码的情况下实现权限控制等工作。具体操作步骤如下:

1.编写过滤器类

首先,需要编写一个类实现javax.servlet.Filter接口,实现对请求的拦截,并在其doFilter()方法中添加登录验证及权限控制等逻辑代码。示例代码如下:

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {
        // 过滤器初始化方法,可以在此处获取配置参数或初始化资源
    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        // 判断用户是否已登录,未登录则重定向到登录页面
        if(request.getSession().getAttribute("user") == null) {
            response.sendRedirect(request.getContextPath() + "/login.jsp");
            return;
        }

        // 判断用户权限是否足够,不足则给予提示或重定向到无权限页面
        String uri = request.getRequestURI();
        if(uri.contains("/admin/") && request.getSession().getAttribute("role") != "admin") {
            response.sendRedirect(request.getContextPath() + "/no_permission.jsp");
            return;
        }

        // 如果用户已登录并权限足够,则放行请求
        filterChain.doFilter(servletRequest, servletResponse);
    }

    public void destroy() {
        // 过滤器销毁方法,可以在此处释放资源
    }
}

在上述代码中,我们实现了LoginFilter类,实现了Filter接口并重写了其init()doFilter()destroy()方法。在doFilter()方法中,我们首先获取到了当前请求的HttpServletRequestHttpServletResponse对象,然后判断用户是否已登录,若未登录,则重定向到登录页面;随后判断用户的权限是否足够,若权限不足,则重定向到无权限页面;最后,如果用户已登录并权限足够,则放行请求。

2.配置web.xml

在过滤器类编写完成后,需要配置web.xml文件,将其注册为过滤器。示例代码如下:

<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.example.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

在上述代码中,我们首先定义了一个名为LoginFilter的过滤器,其类名为com.example.filter.LoginFilter;然后在filter-mapping标签中将过滤器与所有URL匹配上。这样,所有请求都会经过LoginFilter过滤器进行登录验证及权限控制。

3.编写登录页面

实现了过滤器后,我们需要编写一个登录页面用于用户登录,示例代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form action="${pageContext.request.contextPath}/login.do" method="post">
        <p>Username: <input type="text" name="username"></p>
        <p>Password: <input type="password" name="password"></p>
        <p><input type="submit" value="Login"></p>
    </form>
</body>
</html>

在上述代码中,我们定义了一个Html页面,包含一个表单,请求方式为POST,并指向了一个名为login.do的Servlet。在Servlet中,我们可以将用户输入的用户名和密码与数据库中存储的数据进行比对,若一致,则将用户信息存入Session中,登录成功;否则提示用户输入的用户名或密码不正确。

4.编写Servlet

登录页面编写完成后,我们需要编写一个Servlet,用于接收用户登录信息,示例代码如下:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 根据用户名和密码查询数据库,验证用户信息是否正确
        boolean isUserValid = checkUserValid(username, password);

        if(isUserValid) {
            // 用户信息正确,则将用户信息存入Session中,设置用户已登录,跳转至首页
            HttpSession session = request.getSession();
            session.setAttribute("user", username);
            session.setAttribute("role", "admin"); // 也可以根据用户名从数据库中查询用户的角色
            response.sendRedirect(request.getContextPath() + "/index.jsp");
        } else {
            // 用户信息不正确,则给予提示信息,并重定向回登录页面
            request.setAttribute("errorMsg", "Invalid username or password");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
    }

    private boolean checkUserValid(String username, String password) {
        // 查询数据库,比对用户名和密码
        return true; // 在此处应在数据库中查询用户信息,并比对用户名和密码,返回true或false
    }
}

在上述代码中,我们定义了一个Servlet,用于接收前端页面传来的请求,获取用户名和密码,并与数据库存储的信息进行比对。若比对成功,则将用户信息存储到Session中,并跳转到首页;若比对失败,则给予相应的提示信息,并重定向回登录页面。

5.测试登录拦截功能

所有代码编写完成后,我们需要测试一下登录拦截的功能是否生效。首先,我们访问一个需要登录的页面,验证过滤器是否能够拦截未登录的用户并重定向到登录页面;然后,用正确的用户名和密码登录系统,验证过滤器能否正确放行登录用户的请求;最后,我们使用错误的用户名或密码登录系统,验证过滤器是否能够正确重定向到登录页面,并提示用户登录信息不正确。

以上就是Java使用过滤器实现登录拦截处理的完整攻略,其中包含了编写过滤器、配置web.xml、编写登录页面、编写Servlet和测试登录拦截功能等所有步骤。

阅读剩余 66%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 使用过滤器实现登录拦截处理 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • sqlserver2012评估期已过解决问题

    以下是“SQL Server 2012评估期已过解决问题”的完整攻略: SQL Server 2012评估期已过解决问题 如果您使用的是SQL Server 2012评估,那么在评估期过后,您将无法继续使用该版本。以下解决这个问题的步骤: 1. 购买许可证 如果您想继续使用SQL Server 2012,您需要购买许可证。您可以联系Microsoft或其授权…

    other 2023年5月7日
    00
  • Vue封装通用table组件的完整步骤记录

    下面我将详细讲解“Vue封装通用table组件的完整步骤记录”的完整攻略。 步骤一:创建组件 首先,我们需要在Vue项目中创建一个通用的table组件,可用于展示不同类型的数据。创建组件的过程如下: <template> <div class="table"> <table> <thead>…

    other 2023年6月25日
    00
  • 用批处理实现将文件以数字重命名的代码

    以下是使用批处理(bat)实现将文件以数字重命名的完整攻略: 1. 准备工作 首先,需要在电脑上打开任意一个文本编辑器来编写我们的批处理代码。在文本编辑器中,我们可以使用批处理语言中的一些关键词和命令来实现文件的重命名操作。 2. 代码编写 首先,我们需要通过cd命令进入到要重命名文件所在的目录。其次,可以使用dir命令获取当前目录中的所有文件名,以及将目录…

    other 2023年6月26日
    00
  • Swift开发之使用UIRefreshControl实现下拉刷新数据及uirefreshcontrol使用

    下面是针对Swift开发中使用UIRefreshControl实现下拉刷新数据及使用注意事项的详细攻略。 如何使用UIRefreshControl实现下拉刷新数据 步骤一:在uitableviewcontroller或collectionviewcontroller中创建UIRefreshControl对象 在uitableviewcontroller或co…

    other 2023年6月26日
    00
  • Win11 全新右键菜单获开发者支持,WinRAR 已完成适配:无须再忍受二级菜单

    Win11 全新右键菜单获开发者支持 Windows 11 在右键菜单方面进行了全面升级,增加了许多新的功能,如全局音量、Snip & Sketch 等。同时,微软还允许开发人员对右键菜单进行自定义,这意味着用户可以通过安装软件等方式获得更好的右键菜单体验。 步骤一:安装支持 Win11 右键菜单的软件 为了获得更好的右键菜单体验,用户需要安装支持 …

    other 2023年6月27日
    00
  • h5页面实现下载文件(apk、txt等)的三种方式

    h5页面实现下载文件(apk、txt等)的三种方式 在H5页面开发中,有时候需要实现下载文件的功能,比如下载APK文件或下载txt文件等。本文将介绍在H5页面中实现下载文件的三种方式。 1. a标签下载文件 a标签是H5页面中最基础的超链接标签,也可以实现下载文件的功能。我们只需要通过a标签的download属性来指定文件的下载名称即可。 <a hre…

    其他 2023年3月29日
    00
  • vim学习笔记——vim安装方法

    下面是详细的vim学习笔记之vim安装方法的攻略: Vim安装方法 1. 在Linux上安装Vim Vim通常在Linux系统中预装,如果没有安装,可以使用以下命令: Debian/Ubuntu: shellsudo apt-get install vim Red Hat系列: shellsudo yum install vim 2. 在macOS上安装Vi…

    其他 2023年4月16日
    00
  • 微信程序开发之-weixinjsbridge调用

    微信程序开发之-weixinjsbridge调用 在微信小程序开发中,weixinjsbridge是一个非常重要的工具,它可以让我们在小程序中调用微信原生API。本文将详细讲解如何使用weixinjsbridge调用微信的原生API。 weixinjsbridge简介 weixinbridge是微信小程序提的一个JavaScript库,它可以让我们在小程序中…

    other 2023年5月7日
    00
合作推广
合作推广
分享本页
返回顶部