Java Web实战 | 拦截器案例:用户登录权限验证

简介: 在配置文件中如果只定义了一个拦截器,程序首先执行拦截器类中的preHandle()方法。如果preHandle()方法返回false,则中断后续所有代码的执行。如果该方法返回true,程序将继续执行处理器以处理请求。当处理器执行过程中没有出现异常时,会执行拦截器中的postHandle()方法。postHandle()方法执行后会通过相关资源向客户端返回响应,并执行拦截器的afterCompletion()方法;如果处理器执行过程中出现异常,将跳过拦截器中的postHandle()方法,直接由前端控制器渲染异常页面返回响应,最后执行拦截器中的afterCompletion()方法。

640.jpg


在配置文件中如果只定义了一个拦截器,程序首先执行拦截器类中的preHandle()方法。如果preHandle()方法返回false,则中断后续所有代码的执行。如果该方法返回true,程序将继续执行处理器以处理请求。当处理器执行过程中没有出现异常时,会执行拦截器中的postHandle()方法。postHandle()方法执行后会通过相关资源向客户端返回响应,并执行拦截器的afterCompletion()方法;如果处理器执行过程中出现异常,将跳过拦截器中的postHandle()方法,直接由前端控制器渲染异常页面返回响应,最后执行拦截器中的afterCompletion()方法。

下面通过拦截器来完成一个用户登录权限验证的Web应用,具体要求如下:只有成功登录的用户才能访问系统的主页面main.jsp。如果没有成功登录就直接访问主页面,拦截器将拦截请求,并将请求转发到登录页面login.jsp。当成功登录的用户在系统主页面中单击“退出”链接时,会回到登录页面。具体实现步骤如下。

01、创建实体类

创建一个名为User的实体类,用于封装当前用户的用户名和密码。

02、创建控制器

控制器代码如文件1所示。

【文件1】MyLoginController.java
f810235b5943bb1061a9214d2c8df20d.png
e6a73466a33cc39e7766d8b143241615.png
如文件1所示,在客户端请求登录页面(login.jsp)和主页面(main.jsp)时,请求都需要由前端控制器转发,所以在第12~15行和第31~34行增加两个处理器,分别负责转发访问登录页和访问主页的请求。第16~30行定义了用户登录处理器,当验证过用户名和密码后,将用户信息写入session域,并重定向到main.jsp。第35~40行新增处理器logout(),用来处理用户的注销请求,当用户单击“退出”超链接时,注销session对象并重定向到登录页。

03、创建拦截器

创建一个名为com.example.springmvc.interceptor的包,在该包中创建一个名为LoginInterceptor的拦截器。重写preHandler()方法对请求进行拦截。如果用户未经登录而请求相关资源,则执行拦截。判断用户是否登录的标准是HttpSession对象中是否存储了用户信息。拦截器代码如文件2所示。

【文件2】LoginInterceptor.java
e243acca4f7b3ca776171b07c97c32e7.png
2938bacedf2cbc80ad2eb477f3640684.png

04、配置拦截器

修改Spring MVC的配置文件,除了配置包扫描、注解驱动、视图解析器外,还要增加拦截器配置,代码如下:
640.png

05、编写JSP文件,执行测试

在WEB-INF/jsp文件夹下,创建两个JSP文件,一个登录页login.jsp,一个主页面main.jsp,代码分别如文件3,文件4所示。

【文件3】login.jsp
640.png
如文件3所示,表单输入域的名字 name 和pwd要与实体类的属性名一致,这样当表单提交时,表单输入域的值,可作为请求参数值自动映射给实体类User的相关属性。

【文件4】main.jsp
640.png
启动Tomcat服务器,在浏览器的地址栏输入“http://localhost:8080/springmvc/tologin”,填入用户名和密码后,可登录主页,如图1所示。

单击“退出”超链接后会返回登录页。此时,将地址栏的地址修改为“http://localhost:8080/springmvc/main”,在没有登录的情况下访问主页,这个请求会被拦截器拦截并将请求转发给login.jsp页面,浏览器显示的结果如图2所示。读者还可以自行验证用户名、密码错误情况下的运行结果,此处略。
微信图片_20230419082124.png

目录
相关文章
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
1395 0
|
安全 架构师 Java
90% Java新手踩坑!彻底搞懂这4个权限修饰符
Java权限修饰符看似简单,却暗藏致命风险:`public`暴露数据、`protected`跨包失控、默认权限成地雷。本文通过3大真实案例+1张神图,深度解析`private`、`default`、`protected`、`public`的作用域与内存可见性,揭示Spring Bean、继承陷阱、包级漏洞的根源,并奉上防御性编程5大原则,助你筑牢代码第一道防线。
494 1
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
962 1
|
安全 前端开发 Java
Java包管理与访问控制权限详解
本文深入讲解Java包管理和访问控制,涵盖包的创建与使用、访问权限的四个层级,并结合实战案例分析如何设计合理的包结构和访问权限,帮助开发者提升代码的安全性与可维护性。
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
801 1
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
651 1
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
574 1
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
539 0
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
733 16