SpringMVC快速入门(8)拦截器,拦截器案例应用,登录拦截器
发布日期:2021-06-29 15:04:00 浏览次数:3 分类:技术文章

本文共 5928 字,大约阅读时间需要 19 分钟。

一、拦截器

1、定义

Spring Web MVC 的处理器拦截器类似于Servlet开发中的过滤器Filter。

用于对处理器进行预处理和后处理。

2、拦截器定义,创建拦截器,创建第一个拦截器

实现HandlerInterceptor接口,如下

(1)创建MyInterceptor实现HandlerInterceptor接口

在这里插入图片描述

在这里插入图片描述

(2)完善MyInterceptor方法:为分析实现接口三个方法不同的作用做准备

在这里插入图片描述

package com.itzheng.springmvc.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;/* * 自定义拦截器 */public class MyInterceptor implements HandlerInterceptor {
@Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
System.out.println("MyInterceptor.afterCompletion"); } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {
System.out.println("MyInterceptor.postHandle"); } @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("MyInterceptor.preHandle"); //true放行,false拦截 return true; }}

3、配置拦截器

修改springmvc.xml

在这里插入图片描述

4、ItemController当中的itemList当中的内容

在这里插入图片描述

@RequestMapping(value = {
"itemList", "itemList2" }) public ModelAndView itemList() {
ModelAndView mav = new ModelAndView(); List
itemList = itemService.getItemList(); mav.addObject("itemList", itemList); // mav.setViewName("/WEB-INF/jsp/itemList.jsp"); mav.setViewName("itemList"); System.out.println("ItemController.itemList......."); return mav; }

5、运行并测试拦截器

(1)调节日志输出级别

在这里插入图片描述

(2)访问:

在这里插入图片描述

(3)查看运行结果

在这里插入图片描述

在这里插入图片描述

package com.itzheng.springmvc.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;/* * 自定义拦截器 */public class MyInterceptor implements HandlerInterceptor {
//afterCompletion方法执行后被执行 //处理异常,清理资源,记录日志等操纵 @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
System.out.println("MyInterceptor.afterCompletion"); } //方法执行之后,返回ModelAndView之前被执行 //页面的公用参数等操纵 @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {
System.out.println("MyInterceptor.postHandle"); } //进入方法之前被执行 //登录拦截, 权限校验等等 @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("MyInterceptor.preHandle"); //true放行,false拦截 return true; }}

6、创建第二个拦截器

(1)复制上述拦截器

在这里插入图片描述

package com.itzheng.springmvc.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;/* * 自定义拦截器 */public class MyInterceptor2 implements HandlerInterceptor {
//afterCompletion方法执行后被执行 //处理异常,清理资源,记录日志等操纵 @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
System.out.println("MyInterceptor2.afterCompletion"); } //方法执行之后,返回ModelAndView之前被执行 //页面的公用参数等操纵 @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {
System.out.println("MyInterceptor2.postHandle"); } //进入方法之前被执行 //登录拦截, 权限校验等等 @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("MyInterceptor2.preHandle"); //true放行,false拦截 return true; }}
(2)配置拦截器

在这里插入图片描述

(3)运行项目

在这里插入图片描述
查看运行结果
在这里插入图片描述

(4)设置第一个拦截器不放行

在这里插入图片描述

再次运行项目
在这里插入图片描述
被拦截不放行
在这里插入图片描述

(5)设置第一个拦截器放行,第二个不放行

在这里插入图片描述

在这里插入图片描述

运行项目并测试
在这里插入图片描述
拦截器做了放行就会执行afterCompletion
在这里插入图片描述

(6)两个都放行

在这里插入图片描述

在这里插入图片描述
运行并测试:
在这里插入图片描述
执行的顺序就行配置的顺序
在这里插入图片描述

二、拦截器案例应用,登录拦截器

1、创建login.jsp

在这里插入图片描述

在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>			
用户登录
用户名:
密码:

2、创建新的控制器

在这里插入图片描述

用户请求处理器
在这里插入图片描述

package com.itzheng.springmvc.controller;import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/* * 用户请求处理器 */@Controller@RequestMapping("user")public class UserController {
//跳转登录的方法 @RequestMapping("toLogin") public String toLogin() {
return "login"; } //处理登录的方法 @RequestMapping("login") public String login(String username,String password,HttpSession session) {
if(username.equals("admin")) {
session.setAttribute("username", username); return "redirect:/itemList.action"; } return "login"; }}

3、创建LoginInterceptor拦截器

在这里插入图片描述

package com.itzheng.springmvc.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;/* * 登录拦截器 */public class LoginInterceptor implements HandlerInterceptor {
//afterCompletion方法执行后被执行 //处理异常,清理资源,记录日志等操纵 @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
} //方法执行之后,返回ModelAndView之前被执行 //页面的公用参数等操纵 @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {
} //进入方法之前被执行 //登录拦截, 权限校验等等 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
//判断用户有没有登录 Object object = request.getSession().getAttribute("username"); if(object == null) {
response.sendRedirect(request.getContextPath()+"/user/toLogin.action"); } //true放行,false拦截 return true; }}

4、配置拦截器

在这里插入图片描述

5、运行测试

访问

结果跳转到了登录页面

在这里插入图片描述
登录提交信息后跳转到查询页面
在这里插入图片描述
再次访问就不需要登录了
在这里插入图片描述

转载地址:https://code100.blog.csdn.net/article/details/115442224 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java之CRM客户关系管理系统教程+源代码,SpringMVC+Mybatis(SSM项目)
下一篇:用Java学高数:函数极限与连续(一)

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月09日 02时37分09秒