当前位置: 首页 > wzjs >正文

网站地址大全佛山快速排名

网站地址大全,佛山快速排名,外贸建站cms,为什么自己做不出一个好网站在 SpringMVC 框架中,拦截器(Interceptor)是一种强大的机制,它允许开发者在控制器方法执行前后进行拦截,从而实现诸如用户权限验证、日志记录、性能监控等各种功能。本文将深入探讨 SpringMVC 拦截器的相关知识&#x…

在 SpringMVC 框架中,拦截器(Interceptor)是一种强大的机制,它允许开发者在控制器方法执行前后进行拦截,从而实现诸如用户权限验证、日志记录、性能监控等各种功能。本文将深入探讨 SpringMVC 拦截器的相关知识,并结合实际案例进行讲解。

一、拦截器的基本概念

SpringMVC 的拦截器类似于 Servlet 中的 Filter 过滤器,用于拦截用户的请求并作出相应的处理。拦截器是可插拔式的设计,这意味着我们可以在配置文件中灵活地启用或禁用某个拦截器。

二、拦截器与过滤器的区别

  1. 所属技术不同:过滤器属于 Servlet 技术,而拦截器属于 SpringMVC 框架。

  2. 作用范围不同:过滤器可以对所有请求起作用,包括静态资源的请求;拦截器只对访问 controller 层的请求起作用。

  3. 执行顺序不同:过滤器会在请求进入 Tomcat 容器之后但在请求进入 Servlet 之前执行;拦截器则在请求进入 Servlet 之后和 Controller 控制器之间执行。

三、拦截器的方法

拦截器的核心接口是 HandlerInterceptor,它定义了三个重要的方法:

  1. preHandle 方法:该方法在控制器方法执行之前执行。返回值为 Boolean 类型,如果返回 false,表示拦截,不再向下执行;如果返回 true,表示放行,程序将继续执行控制器中的方法。此方法可用于对请求进行预处理,如判断用户是否登录、是否有权限访问等。

  2. postHandle 方法:该方法在控制器方法执行之后、返回 ModelAndView 之前执行。由于该方法会在 DispatcherServlet 进行视图渲染之前被调用,所以可以用于处理返回的视图,如修改模型和视图中的数据。

  3. afterCompletion 方法:该方法在控制器方法执行完毕之后执行。由于是在 Controller 方法执行完毕之后执行该方法,所以该方法适合进行一些资源清理、记录日志信息等处理操作。

四、单个拦截器的执行流程

当配置了单个拦截器时,程序首先会执行拦截器类中的 preHandle() 方法。如果该方法返回 true,则程序继续向下执行处理器当中的方法;否则不再向下执行。业务处理器(即控制器 Controller 类)处理完请求后,会执行 postHandle() 方法,然后通过 DispatcherServlet 向前端返回响应。在 DispatcherServlet 处理完请求后,才会执行 afterCompletion() 方法。

五、使用拦截器实现用户登录权限验证

下面通过一个实际案例来演示如何使用拦截器实现用户登录权限验证。

1. 登录控制器(LoginController)

@Controller
@RequestMapping("/login")
public class LoginController {@RequestMapping(value = "/tologin", method = RequestMethod.GET)public String toLogin() {return "login";}@RequestMapping(value = "/login", method = RequestMethod.POST)public String login(String username, String password, HttpSession session) {if (username.equals("admin") && password.equals("123456")) {System.out.println("登陆成功");session.setAttribute("username", "password");return "A";}return "B";}
}

2. 登录页面(login.html)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录页面</title>
</head>
<body>
<form action="/10SpringMVC/login/login" method="post">账户:<input type="text" name="username"/><br/>密码:<input type="password" name="password"/><br/><input type="submit" value="登录"/>
</form>
</body>
</html>

预览

3. 拦截器配置

在 springMV.xml 文件中配置拦截器:

xml复制

<mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/> <!--/**表示所有url--><bean class="com.qcby.config.LoginInterceptor"/></mvc:interceptor>
</mvc:interceptors>

4. 登录拦截器(LoginInterceptor)

java复制

public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String url = request.getRequestURI();if (url.contains("login")) {return true;} else {if (request.getSession().getAttribute("username") != null) {return true;} else {response.sendRedirect("/html/login.html");return false;}}}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {HandlerInterceptor.super.afterCompletion(request, response, handler, ex);}
}

六、多个拦截器的执行流程

当多个拦截器同时工作时,它们的 preHandle() 方法会按照配置文件中拦截器的配置顺序执行,而它们的 postHandle() 方法和 afterCompletion() 方法则会按照配置顺序的反序执行。

假设有两个拦截器 Interceptor1 和 Interceptor2,并且在配置文件中,Interceptor1 拦截器配置在前:

xml复制

<mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/><bean class="com.qcby.Interceptor.Interceptor1"/></mvc:interceptor><mvc:interceptor><mvc:mapping path="/**"/><bean class="com.qcby.Interceptor.Interceptor2"/></mvc:interceptor>
</mvc:interceptors>

在这种情况下,preHandle() 方法的执行顺序是 Interceptor1 的 preHandle() 先执行,然后是 Interceptor2 的 preHandle()。而 postHandle() 和 afterCompletion() 方法的执行顺序则相反,即先执行 Interceptor2 的 postHandle() 和 afterCompletion(),再执行 Interceptor1 的 postHandle() 和 afterCompletion()。

七、总结

SpringMVC 拦截器是一种非常实用的机制,通过它可以灵活地对请求进行拦截和处理。在实际开发中,我们可以通过拦截器实现用户权限验证、日志记录、性能监控等多种功能。本文通过详细讲解拦截器的基本概念、方法、执行流程以及实际案例,帮助读者深入理解 SpringMVC 拦截器的使用方法和应用场景。希望本文对大家在学习和使用 SpringMVC 框架时有所帮助。

http://www.dtcms.com/wzjs/197752.html

相关文章:

  • 新疆交通建设管理局厅网站网站快速优化排名排名
  • 做网站的准备品牌营销战略
  • 香港低价服务器seo优化网站网页教学
  • 网址大全有哪些怎样优化关键词到首页
  • 如何建设英文网站全国疫情又严重了
  • 英文版网站案例电脑培训班零基础
  • 合肥的网站建设刚刚刚刚刚刚刚刚刚刚刚刚刚刚刚
  • 网站功能及报价360站长平台
  • 做网站大概一个月多少工资深圳网络营销技巧
  • 黄冈商城网站建设宁德市安全教育平台
  • 怎么看网站banner尺寸汕头seo按天付费
  • 云浮 网站建设磁力吧
  • 旅游网站建设有哪些不足片多多可以免费看电视剧吗
  • 怎么提升网站流量谷歌seo网站推广怎么做优化
  • 做网站怎么买服务器关键词生成器在线
  • 广告设计培训内容网站seo优化总结
  • 网站右侧广告代码纵横seo
  • 网站怎么推广出去比较好爱站网关键词挖掘机
  • 做数字艺术设计的网站安徽做网站公司哪家好
  • pc端手机网站 viewport 自适应济南百度代理
  • 温州哪里有网站建设做网页设计的软件
  • 成都百度网站排名优化网站快速排名
  • 建设银行网站怎么登陆不了刚刚传来最新消息
  • 网站开发算软件开发吗百度云搜索引擎入口盘多多
  • 区块链网站开发费用推广竞价托管费用
  • 兰州商城网站建设一键关键词优化
  • 王也道长古风头像南宁seo优化公司排名
  • 做门户网站的公司啥是网络推广
  • 网站开发毕业论文参考文献关键词排名怎么快速上去
  • 培训班该如何建站太原百度推广排名优化