简述:跟着狂神学Java,使用SpringMVC的拦截器,敲的一个小demo,主要理解拦截器的使用。
也可以去看看狂神的笔记 https://www.kuangstudy.com/zl/ssm#header3
拦截器
- 拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用
- 拦截器只会拦截访问的控制器方法, 如果访问的是jsp/html/css/image/js是不会进行拦截的
过滤器与拦截器的区别:拦截器是AOP思想的具体应用。
实现思路
- 有一个登陆页面,需要写一个controller访问页面。
- 登陆页面有一提交表单的动作。需要在controller中处理。判断用户名密码是否正确。如果正确,向session中写入用户信息。返回登陆成功。
- 拦截用户请求,判断用户是否登陆。如果用户已经登陆。放行, 如果用户未登陆,跳转到登陆页面
所使用到的配置:tomcat 9.0.68服务器、MAVEN 3.6.3、IDEA 2021.1、IE浏览器
配置的jar包
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> </dependency> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.18</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> </dependency>
编写一个登陆页面 login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登录页面</title> </head> <body> <form action="${pageContext.request.contextPath}/user/login"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="passwd"><br> <input type="submit" value="提交"> </form> </body> </html>
创建用户实体类 user.java
package com.guan.dao; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class User { private String username; private String passwd; }
编写一个Controller处理请求 LoginController.java
1 package com.guan.controller; 2 3 import com.guan.dao.User; 4 import org.springframework.stereotype.Controller; 5 import org.springframework.ui.Model; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 8 import javax.servlet.http.HttpSession; 9 10 @Controller 11 @RequestMapping("/user") 12 public class LoginController { 13 14 //跳转到登录页面 15 @RequestMapping("/jumplogin") 16 public String jumpLogin(){ 17 return "login"; 18 } 19 //跳转到首页 20 @RequestMapping("/jumpsuccess") 21 public String jumpsuccess(){ 22 return "success"; 23 } 24 //登陆提交 25 @RequestMapping("/login") 26 public String lgoin(HttpSession session, User user, Model model){ 27 System.out.println("接收前端的数据==="+user); 28 //session记录用户信息 29 model.addAttribute("user",user); 30 session.setAttribute("user",user); 31 return "success"; 32 } 33 //退出登录 34 @RequestMapping("/out") 35 public String loginout(HttpSession session){ 36 session.removeAttribute("user"); 37 return "login"; 38 } 39 }
编写一个登陆成功的页面 success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>成功页面</title> </head> <body> ${user} <a href="${pageContext.request.contextPath}/user/out">退出登录</a> </body> </html>
在 index 页面上测试跳转!启动Tomcat 测试,未登录也可以进入主页!
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <h1>首页</h1> <hr> <%--登录--%> <a href="${pageContext.request.contextPath}/user/jumplogin">登录</a> <a href="${pageContext.request.contextPath}/user/jumpsuccess">成功页面</a> </body> </html>
编写用户登录拦截器 MyInterceptor.java
1 package com.guan.config; 2 3 import org.springframework.web.servlet.HandlerInterceptor; 4 import org.springframework.web.servlet.ModelAndView; 5 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 import javax.servlet.http.HttpSession; 9 10 public class MyInterceptor implements HandlerInterceptor { 11 @Override 12 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 13 System.out.println("处理前==============="); 14 // 如果是登陆页面则放行 15 if (request.getRequestURI().contains("login")){ 16 return true; 17 } 18 // 用户没有登陆跳转到登陆页面 19 HttpSession session = request.getSession(); 20 if (session.getAttribute("user") !=null){ 21 return true; 22 } 23 // 用户没有登陆跳转到登陆页面 24 request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response); 25 return false; // 关闭拦截器 26 //return false; 开启拦截器 27 } 28 29 @Override 30 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { 31 System.out.println("处理后==============="); 32 HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); 33 34 } 35 36 @Override 37 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { 38 System.out.println("清理================="); 39 HandlerInterceptor.super.afterCompletion(request, response, handler, ex); 40 } 41 }
在Springmvc的配置文件中注册拦截器
<!-- 拦截器配置--> <mvc:interceptors> <mvc:interceptor> <!-- 所有请求--> <mvc:mapping path="/**"/> <bean class="com.guan.config.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors>
标签:拦截器,登录,user,import,运用,servlet,public,页面 From: https://www.cnblogs.com/mo-de/p/16853982.html