【JavaWeb】Spring Interceptor

 

 

  参考博客:

https://blog.csdn.net/qq_35246620/article/details/68487904?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

https://blog.csdn.net/qq_24598601/article/details/85037093?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

https://www.cnblogs.com/Vincent-yuan/p/11280240.html

 

 1. 定义一个实现 HandlerInterceptor 接口 的类

 

package edu.example.hello;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
public class HelloImgInterceptor implements HandlerInterceptor{
          //在处理方法之前执行,一般用来做准备工作,比如日志、权限检查,false即被拦截,true继续,不会继续调用其他两个方法,此时我们需要通过 response 来产生响应
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler)throws Exception {
		
		return (request.getSession().getAttribute("login") != null);
	
	}         


        //在处理方法执行之后,在渲染视图执行之前执行,(即Controller 执行后,并且未返回 ModelAndView 前调用此方法)一般用来做一些清理工作
        //这个方法必须所以的拦截器的 preHandle 方法都返回 true 才执行
    @Override
    public void postHandle(HttpServletRequest req, HttpServletResponse resp, Object handler, ModelAndView mv)
            throws Exception {
        System.out.println("执行postHandler");
    }
    
     // 在视图渲染后执行  一般用来释放资源 这个方法必须是 preHandle 返回 true 才执行。
    @Override
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        System.out.println("执行afterCompletion");
    }
}

  

package edu.example.hello;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

@Component
public class HelloInterceptor implements HandlerInterceptor{
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler)throws Exception {
		
		System.out.println(request.getParameter("no"));
		return true;
		
	}
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			 ModelAndView modelAndView) throws Exception {
		List<Student> list = (List<Student>) modelAndView.getModel().get("list");//从视图拦截到的信息
		for (Student student: list) {
			System.out.printf("%s,%s,%d\n", student.getNo(), student.getName(), student.getAge());
		}
	}
}

  

  2. 创建控制器 ,添加拦截器配置

package edu.example.hello;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class HelloConfigure implements WebMvcConfigurer{
	@Autowired
	private HelloInterceptor interceptor;
	
	@Autowired
	private HelloImgInterceptor imgInterceptor;//图片拦截
	
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(interceptor).addPathPatterns("/");
		registry.addInterceptor(imgInterceptor).addPathPatterns("/**.png");

	}

}

 

package edu.example.hello;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {
	@Autowired
//	private Student student;
private StudentFactory sf;
	@GetMapping("/")
	public String home(Model model) {
		System.out.println("hello.get...");

		model.addAttribute("list",sf.getStudents());
		return "home";
	}
	@PostMapping("/")
	public String home(Model model, String no) {
		System.out.println("hello.post...");
		model.addAttribute("list", sf.findBy(no));
		return "home";
		
	}
//如果1,则是登陆,如果0,是登出 @GetMapping("/login") public String login(int type, HttpSession session) { if (type == 1) session.setAttribute("login", new Object()); else session.removeAttribute("login"); return "home"; } }

  

<html xmlns:th="http://www.thymeleaf.org">
<body>
<h2>Student...
<a href="login?type=1">login</a> <a href="login?type=0">logout</a></h2>
<!-- <ol>
<li th:each="st:${list}" th:text="${st.name}"></li>
动态会代替静态
</ol> -->
<img alt="spring" src="1.png">
<p>
<form action="" method="post">
	no:<input type="text" name="no"/>
	<input type="submit">
</form>
<table border="1">
	<tr>
		<th>No</th><th>Name</th><th>Age</th>
	</tr>
	<tr th:each="st:${list}">
		<td th:text="${st.no}"></td><td th:text="${st.name}"></td><td th:text="${st.age}"></td>
	</tr>

</table>
</body>
</html>

  

posted @ 2020-03-14 17:31  SeasonBubble  阅读(220)  评论(0)    收藏  举报