0
点赞
收藏
分享

微信扫一扫

过滤器的使用


过滤器代码

代码如下:

public class ApiFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest)request; // 这里转化下,否则Servlet是无法获取到url呢
HttpServletResponse httpServletResponse = (HttpServletResponse)response; // 这里转化下,否则Servlet是无法获取到url呢
String URL = httpServletRequest.getRequestURL().toString();
if(URL.contains("api")){ // 如果包含api,说明是对外接口 那么不过滤
chain.doFilter(request,response);

}else{
if(1==1){ // 这里模拟用户登录
httpServletResponse.sendRedirect("/login"); // 重定向到登录页面
}

}

}

@Override
public void destroy() {

}

}

注册过滤器

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Bean
public FilterRegistrationBean filterRegist() {
FilterRegistrationBean frBean = new FilterRegistrationBean();
frBean.setFilter(new ApiFilter());
frBean.addUrlPatterns("/api"); // /*是过滤所有
System.out.println("filter");
return frBean;
}
}

返回rest风格的修改下即可

和拦截器不同的是这里不用return false:

if(1==1){
// 这两行编码格式的代码需要设置 否则中文乱码
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");

PrintWriter out = null ;
JSONObject res = new JSONObject();

res.put("code",-1);
res.put("message","未知异常");
out = response.getWriter();
out.append(res.toString());

}

经典应用场景

设置编码:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filter)
throws IOException, ServletException {
HttpServletRequest request1 = (HttpServletRequest)request;
HttpServletResponse response1 = (HttpServletResponse)response;

// 设置编码
request1.setCharacterEncoding("UTF-8");
response1.setCharacterEncoding("UTF-8");
filter.doFilter(request, response);
}


举报

相关推荐

0 条评论