> 文档中心 > 06SpringMVC----拦截器

06SpringMVC----拦截器

目录

实例应用

实现

index.jsp

1、编写一个登陆页面  login.jsp  WEB-INF-jsp下

2、编写一个首页  main.jsp  WEB-INF-jsp下 

3、编写一个Controller处理请求

4、在 index 页面上测试跳转!启动Tomcat 测试,未登录也可以进入主页!

5、编写用户登录拦截器

6、在springmvc的配置文件中配置拦截器


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

过滤器

  • servlet规范中的一部分,任何java web工程都可以使用

  • 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截

拦截器

  • 拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用

  • 拦截器只会拦截访问的控制器方法, 如果访问的是jsp/html/css/image/js是不会进行拦截的

自定义拦截器

那如何实现拦截器呢?

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

1、新建一个Moudule 添加web支持

2、配置web.xml 和 springmvc-servlet.xml 文件

3、编写一个拦截器

import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyInterceptor implements HandlerInterceptor {    //return ture  执行下一个拦截器    //return false  不执行下一个拦截器    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("========处理前============"); return true;    }    //日志    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("========处理后============");    }    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("========清理============");    }}

4、在springmvc的配置文件中配置拦截器

                             

5、编写一个Controller,接收请求

@RestControllerpublic class TestController {    @GetMapping("/t1")    public String test(){ System.out.println("TestController test方法执行了"); return "ok";    }}

6、前端 index.jsp

拦截器测试

实例应用

验证用户是否登录 (认证用户)

实现思路

1、有一个登陆页面,需要写一个controller访问页面。

2、登陆页面有一提交表单的动作。需要在controller中处理。判断用户名密码是否正确。如果正确,向session中写入用户信息。返回登陆成功。

3、拦截用户请求,判断用户是否登陆。如果用户已经登陆。放行, 如果用户未登陆,跳转到登陆页面

实现

在 WEB-INF 下得所有页面或者资源,无法直接访问,只能通过controller来调用

index.jsp

Title

登录页面


欢迎来到我得世界

登录页面

首页

1、编写一个登陆页面  login.jsp  WEB-INF-jsp下

    Title

登录页面

用户名: 密码:

2、编写一个首页  main.jsp  WEB-INF-jsp下 

    Title

首页

${username}

注销

3、编写一个Controller处理请求

import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpSession;/** * @author gh  Email:@2495140780qq.com * @Description * @date 2022-01-21-下午 9:18 */@Controller@RequestMapping("user")public class LoginController {    @RequestMapping("/main")    public String main() { return "main";    }    @RequestMapping("/goLogin")    public String goLogin() { return "login";    }    @RequestMapping("/login")    public String login(String username, String password, HttpSession session, Model model) { //把用户的信息存放在session中 session.setAttribute("userLoginInfo",username); model.addAttribute("username", username); return "main";    }    @RequestMapping("/ghOut")    public String ghOut( HttpSession session) { session.removeAttribute("userLoginInfo"); return "main";    }}

4、在 index 页面上测试跳转!启动Tomcat 测试,未登录也可以进入主页!

5、编写用户登录拦截器

import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class LoginInterceptor implements HandlerInterceptor {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); //放行:判断什么情况下登录 //在首页放行 if (request.getRequestURI().contains("goLogin")) {     return true; } //说明我们  此时在登录 if (request.getRequestURI().contains("login")) {     return true; } //第一个登录也没有session //session 有数据 登录状态 if (session.getAttribute("userLoginInfo")!=null){     return true; } //判断什么情况下没有登录 request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response); return false;    }}

6、在springmvc的配置文件中配置拦截器

          

安全期查询