Python 官方文档:入门教程 => 点击学习
目录1.什么是拦截器2.拦截器和过滤器有哪些区别3.拦截器方法4.多个拦截器的执行流程1.什么是拦截器 springMVC提供了Intercepter拦截器机制,类似于Servl
springMVC提供了Intercepter拦截器机制,类似于Servlet当中的Filter过滤器,用于拦截用户的请求并作出相应的处理,比如通过拦截器来进行用户权限验证或者用来判断用户是否登录。springmvc拦截器是可插拔式的设计,需要某一功能拦截器,就需要在配置文件中应用拦截器即可;如果不需要这个功能拦截器,只需要在配置文件中取消该拦截器即可。
1.过滤器依赖于servlet,而拦截器技术属于SpringMVC
2.过滤器可对所有请求起作用,拦截器只对访问controller层的请求起作用。
3.过滤器会比拦截器先执行。拦截器(Interceptor)是在Servlet和Controller控制器之间执行;而过滤器(Filter)是在请求进入Tomcat容器之后 但是在请求进入Servlet之前执行。
我们可以看到 HandlerInterceptor接口有三个方法,分别是preHandle、postHandle、afterCompletion,关于这三个方法
(1)登录页:如果账号密码正确存入session
package com.qcby.controller;
import com.qcby.model.User1;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.WEB.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.Http.httpsession;
@Controller
@RequestMapping("/to")
public class LoginController {
@RequestMapping("/toLogin")
public String loginPage(){
System.out.println("跳转到登录页");
return "login";
}
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String login(User1 user, Model model, HttpSession session){
if(user.getUsername() !=null && user.getUsername().equals("admin")
&& user.getPassword() !=null && user.getPassword().equals("123456")){
System.out.println("用户登录功能实现");
//将用户添加到session保存
session.setAttribute("user",user);
return "suc";
}
model.addAttribute("msg","账户或密码错误,请重新登录");
return "login";
}
}
(2)访问controller层,则需要通过拦截器的登录判断
package com.qcby.config;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取请求的url
String url=request.getRequestURI();
if(!url.contains("login")){
//不是登录请求,判断有没有登录
if(request.getSession().getAttribute("user")!=null){
return true; //说明已经登录,则放行
}else{
request.setAttribute("msg","你还没有登录,请登录。。。");
request.getRequestDispatcher("/html/login.html").forward(request,response);
}
}else {
//登录请求,放行
return true;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
(3)在springMV.xml文件当中配置拦截器
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/> <!--/**表示所有url-->
<bean class="com.qcby.Interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
当多个拦截器同时工作时,它们的preHandle()方法会按照配置文件中拦截器的配置顺序执行,而它们的postHandle()方法和afterCompletion()方法则会按照配置顺序的反序执行。
假设有两个拦截器Interceptor1和interceptor2,并且在配置文件中,Interceptor1拦截器配置在前。
到此这篇关于SpringMVC拦截器超详细解读的文章就介绍到这了,更多相关SpringMVC拦截器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: SpringMVC拦截器超详细解读
本文链接: https://www.lsjlt.com/news/165380.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0