拦截器

it2025-02-08  7

拦截器

概述:springmvc的处理器拦截器类似于servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自定义一些拦截器来实现特定的功能。

过滤器与拦截器的区别:拦截器是AOP 思想的具体应用。

过滤器:

servlet规范中的一部分,任何Java web工程都可以使用在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截

拦截器:

是springmvc框架自己的,中有使用了springmvc框架的工程才能使用只会拦截访问的控制器方法,如果访问的是jsp/html/css/image/js是不会进行拦截的

1.如何实现拦截器?

想要自定义拦截器,必须实现 HandlerInterceptor 接口。

2.配置

1.applicationContext.xml

<!--登录拦截--> <mvc:interceptors> <mvc:interceptor> <!--包括这个请求下的所有的请求--> <mvc:mapping path="/user/**"/> <bean class="com.kuang.config.LoginInterceptor"/> </mvc:interceptor> </mvc:interceptors>

2.web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>

3.config

1.LoginInterceptor

public class LoginInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); //放行:判断什么情况下登录,session存在 //登陆页面也会放行 if(request.getRequestURI().contains("goLogin")){ return true; } //第一次登陆也没有session if(request.getRequestURI().contains("login")){ return true; } if(session.getAttribute("userLoginInfo")!=null){ return true; } //拦截 request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response); return false; } }

2.MyInterceptor(用于演示)

public class MyInterceptor implements HandlerInterceptor { //return true 执行下一个拦截器,放行 //return false 不执行下一个拦截器,卡死 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("============处理前============"); return true; } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("============处理后============"); } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("============清理============"); } }

4.controller

LoginController

@Controller @RequestMapping("/user") public class LoginController { @RequestMapping("/goLogin") public String goLogin(String username, String password, HttpSession session,Model model){ //把用户的信息存在session中; session.setAttribute("userLoginInfo",username); model.addAttribute("username",username); return "login"; } @RequestMapping("/main") public String main1(){ return "main"; } @RequestMapping("/login") public String login(){ return "main"; } @RequestMapping("/goOut") public String goOut(HttpSession session){ //把用户的信息存在session中; session.removeAttribute("userLoginInfo"); return "index"; } }

5.jsp

1.login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <p>登录</p> <form action="${pageContext.request.contextPath}/user/login" method="post"> 用户名:<input type="text" name="name"/> 密码:<input type="password" name="password"/> <input type="submit" value="提交"/> </form> </body> </html>

2.main.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1><p>首页</p></h1> <h3><a href="${pageContext.request.contextPath}/user/goOut">注销</a></h3> </body> </html>

6.index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <h1><a href="${pageContext.request.contextPath}/user/goLogin">登陆页面</a></h1> <h1><a href="${pageContext.request.contextPath}/user/main">首页</a></h1> </body> </html>
最新回复(0)