自定义Filter
1)使用Servlet3.0的注解进行配置
2)启动类里面增加 @ServletComponentScan,进行扫描
3)新建一个Filter类,implements Filter,并实现对应的接口
4) @WebFilter 标记一个类为filter,被spring进行扫描 urlPatterns:拦截规则,支持正则
5)控制chain.doFilter的方法的调用,来实现是否通过放行不放行,web应用
resp.sendRedirect("/index.html");
场景:权限控制、用户登录(非前端后端分离场景)等
1.MyFilter过滤类: (添加@WebFilter注解哦!)
/**
* 注解
*/
@WebFilter(urlPatterns = "/your/*",filterName = "LoginFilter")
public class LoginFilter implements Filter {
/**
* 容器加载的时候调用
* @param filterConfig
* @throws ServletException
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("LoginFilter init!");
}
//请求被拦截的时候进行调用
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println(" loginFilter doFilter");
//转换成协议对象
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
//获得请求数据
String username = req.getParameter("username");
//判断相等,则放行
if ("hlx".equals(username)) {
filterChain.doFilter(servletRequest,servletResponse);
} else {
//不等时,跳转到页面
resp.sendRedirect("/index.html");
return;
}
}
/**
* 容器被销毁的时候被调用
*/
public void destroy() {
System.out.println("LoginFilter destroy!");
}
}
2、Controller类
@RequestMapping(path = "/your/login1")
public Object login1(){
maps.put("id",100);
return maps;
}
3、在Application 启动类 添加 @ServletComponentScan
注解
效果:
如果访问http://localhost:8089/your/login1,那么就会直接跳转到index.html页面哦