1. 程式人生 > >[springboot::]學習使用過濾器

[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.測試結果
在這裡插入圖片描述
在這裡插入圖片描述