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=李明