Filter 过滤器重定向url
业务场景
最近接了一个老项目,是用springMvc开发的,这个项目的前置拦截器是拦截所有的*.do的请求,我在这个项目上开发新的接口,和第三方联调的时候发现第三方要求把我们提供的接口后面所有的.do都去掉,本来这个项目就老,不敢改,就在网上搜了这个方法:设置一个过滤器(这个过滤器要放在过滤器链的最前面),然后第三方调用我们接口的时候,我们在请求的后面加个.do,然后再转发。
代码
先定义过滤器
<filter>
<filter-name>oAuthFilter</filter-name>
<filter-class>com.utstar.sop.filter.oAuthFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>oAuthFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后再写过滤器的内容
public class oAuthFilter implements Filter {
private static final Logger logger = Logger.getLogger(oAuthFilter.class.getSimpleName());
private FilterConfig filterConfig = null;
@Override
public void init(FilterConfig arg0) throws ServletException {
this.filterConfig = arg0;
}
@Override
public void destroy() {
filterConfig = null;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
//若使用 req.getRequestURI() 会报错 404
String servletPath = req.getServletPath();
if (StringUtils.isNotBlank(servletPath) && servletPath.contains("schema/") && !servletPath.contains(".do")) {
//替换接口
String targetUrl = servletPath+".do";
req.getRequestDispatcher(targetUrl).forward(request, response);
// 重定向之后不能再将请求转发给过滤器链下一个filter,否则会抛异常
return;
}
filterChain.doFilter(request, response);
}
}
转载: Filter 过滤器拦截修改 Url并且重定向使用request.getRequestDispatcher().forward(request, response)