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

目录
相关文章
|
11月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
1266 0
|
11月前
|
存储 JavaScript 安全
Web渗透-XSS漏洞深入及xss-labs靶场实战
XSS(跨站脚本攻击)是常见的Web安全漏洞,通过在网页中注入恶意脚本,窃取用户信息或执行非法操作。本文介绍其原理、分类(反射型、存储型、DOM型)、测试方法及xss-labs靶场实战案例,帮助理解与防御XSS攻击。
3095 1
Web渗透-XSS漏洞深入及xss-labs靶场实战
|
11月前
|
安全 架构师 Java
90% Java新手踩坑!彻底搞懂这4个权限修饰符
Java权限修饰符看似简单,却暗藏致命风险:`public`暴露数据、`protected`跨包失控、默认权限成地雷。本文通过3大真实案例+1张神图,深度解析`private`、`default`、`protected`、`public`的作用域与内存可见性,揭示Spring Bean、继承陷阱、包级漏洞的根源,并奉上防御性编程5大原则,助你筑牢代码第一道防线。
407 1
|
11月前
|
安全 Linux PHP
Web渗透-命令执行漏洞-及常见靶场检测实战
命令执行漏洞(RCE)指应用程序调用系统命令时,用户可控制输入参数,导致恶意命令被拼接执行,从而危害系统安全。常见于PHP的system、exec等函数。攻击者可通过命令连接符在目标系统上执行任意命令,造成数据泄露或服务瘫痪。漏洞成因包括代码层过滤不严、第三方组件缺陷等。可通过参数过滤、最小权限运行等方式防御。本文还介绍了绕过方式、靶场测试及复现过程。
2057 0
|
12月前
|
安全 前端开发 Java
Java包管理与访问控制权限详解
本文深入讲解Java包管理和访问控制,涵盖包的创建与使用、访问权限的四个层级,并结合实战案例分析如何设计合理的包结构和访问权限,帮助开发者提升代码的安全性与可维护性。
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
10月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
681 4
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。
|
前端开发 JavaScript Shell
鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析
本文为鸿蒙开发者整理了Web性能优化的实战案例解析,结合官方文档深度扩展。内容涵盖点击响应时延核心指标(≤100ms)、性能分析工具链(如DevTools时间线、ArkUI Trace抓取)以及高频优化场景,包括递归函数优化、网络请求阻塞解决方案和setTimeout滥用问题等。同时提供进阶技巧,如首帧加速、透明动画陷阱规避及Web组件初始化加速,并通过优化前后Trace对比展示成果。最后总结了快速定位问题的方法与开发建议,助力开发者提升Web应用性能。