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

举报
TiAmoZhang 发表于 2023/04/19 08:33:23 2023/04/19
【摘要】 在配置文件中如果只定义了一个拦截器,程序首先执行拦截器类中的preHandle()方法。如果preHandle()方法返回false,则中断后续所有代码的执行。如果该方法返回true,程序将继续执行处理器以处理请求。当处理器执行过程中没有出现异常时,会执行拦截器中的postHandle()方法。postHandle()方法执行后会通过相关资源向客户端返回响应,并执行拦截器的afterComplet
简介: 在配置文件中如果只定义了一个拦截器,程序首先执行拦截器类中的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

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。