springboot攔截器之Filter(一)


filter實際上就是一個過濾器

1使用Servlet3.0的注解進行配置

2啟動類中家@ServletComponentScan,進行掃描

3新建一個Filter類,implements Filter,並且實現對應的接口

4@WebFilter(urlPatterns = "/api/*",filterName = "LogginFilter")  標記一個類為filter,被spring掃描

urlPatterns 是攔截規則,支持正則  

5控制filterChain.doFilter方法的調用,來實現是否支持放行,不放行,web應該返回resp.sendRedirect("/index.html");

場景:權限的控制,用戶的登陸(非前后端分離)

6代碼:

6.1目錄結構

 

 6.2添加注解

 

 

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
@ServletComponentScan
public class Springboot2Application extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Springboot2Application.class);
}

public static void main(String[] args) {
SpringApplication.run(Springboot2Application.class, args);
}
}

6.3新建Filter

 

 

package com.example.demo.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter(urlPatterns = "/api/*",filterName = "LogginFilter")
public class LogginFilter implements Filter{

/**
* 容器加載的時候調用
*/
@Override
public void init(FilterConfig filterConfig)throws ServletException {
System.out.println("init loginFilter");
}

/**
* 容器攔截的時候調用
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse serletResponse, FilterChain filterChain)
throws IOException, ServletException {
System.out.println("doliter loginFilter");
HttpServletRequest rec=(HttpServletRequest)servletRequest;
HttpServletResponse resp=(HttpServletResponse) serletResponse;
String username=rec.getParameter("username");
if("李明".equals(username)) {
filterChain.doFilter(servletRequest, serletResponse);
}else {
resp.sendRedirect("/index.html");
return;
}
}

/**
* 容器銷毀的時候調用
*/
@Override
public void destroy() {
System.out.println("destroy loginFilter");
}


}

6.4新建controller

 

 

package com.example.demo.controller.login;


import java.util.HashMap;
import java.util.Map;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class LoginController {

private Map<String,Object> params=new HashMap<>();

@RequestMapping(value="/api/v1/account")
public Object account() {
params.put("money", "1000");
return params;
}
}

 

6.5訪問地址:http://localhost:8080//api/v1/account?username=李明

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM