1.首先新建UserFiler类,并且实现Filter
package com.example.demo.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter(filterName = "userfilter",urlPatterns = "/HELLO")
//只拦截HELLO请求
public class UserFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器开始初始化>>>>>>>>");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpSession session = request.getSession();
if(session.getAttribute("userKey") == null){ //获取浏览器的session
System.out.print("用户登录key不存在,进行拦截");
return;
}
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("过滤器开始销毁>>>>>>>>");
}
}
2.在DemoApplication类,用@@ServletComponentScan进行引入,
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
3.用上一篇的userInfo.html页面进行测试
首先是Controller
@Controller
public class ModelAndViewController {
/**
* 注入服务层
*/
@Resource
private PubUserService userService;
@RequestMapping("userinfo")
public String userInfo(Model model, HttpServletRequest request){
List<PubUser> list = userService.findAll();
model.addAttribute("user",list);
HttpSession session = request.getSession();
session.setAttribute("userKey","userKey"); //向 浏览器 存入session
return "pubUser/userInfo";
}
@ResponseBody
@GetMapping("HELLO")
public BaseResult hello(){
BaseResult br = new BaseResult();
br.put("name","三国演义");
return br;
}
}
userKey的值,在页面进行展示
<span th:text="${session.user}"></span><a th:href="@{HELLO}">userKey,存在不拦截,不存在拦截</a>
如果过滤器生效的话,就不会在在控制台 打印,
System.out.print("用户登录key不存在,进行拦截");
4.测试结果