[springboot::]学习使用过滤器

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.测试结果
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Lining_s/article/details/84260577