要求:
代码中配置的 url 路径为 http://127.0.0.1/api/associates/queryAssociatesInfo
现在要求 http://127.0.0.1/associates/queryAssociatesInfo 也可以同样访问同一个 conroller 下面的 method, 并且要求参数全部跟随
代码:
- package com.shitou.huishi.framework.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.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpServletResponseWrapper;
- /**
- * 修改请求路由, 当进入 url 为 / a/b 时, 将其 url 修改为 / api/a/b
- * Created by qhong on 2018/5/16 13:27
- **/
- public class UrlFilter implements Filter {
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- }
- @Override
- public void destroy() {
- }
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
- HttpServletRequest httpRequest = (HttpServletRequest)request;
- HttpServletResponseWrapper httpResponse = new HttpServletResponseWrapper((HttpServletResponse) response);
- System.out.println(httpRequest.getRequestURI());
- String path=httpRequest.getRequestURI();
- if(path.indexOf("/api/")<0){
- path="/api"+path;
- System.out.println(path);
- httpRequest.getRequestDispatcher(path).forward(request,response);
- }
- else {
- chain.doFilter(request,response);
- }
- return;
- }
- }
这个类必须继承 Filter 类, 这个是 Servlet 的规范. 有了过滤器类以后, 以前的 web 项目可以在 web.xml 中进行配置, 但是 spring boot 项目并没有 web.xml 这个文件, 那怎么配置? 在 Spring boot 中, 我们需要 FilterRegistrationBean 来完成配置.
其实现过程如下:
- package com.shitou.huishi.framework.filter;
- import org.springframework.boot.web.servlet.FilterRegistrationBean;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- /**
- * Created by qhong on 2018/5/16 15:28
- **/
- @Configuration
- public class FilterConfig {
- @Bean
- public FilterRegistrationBean registFilter() {
- FilterRegistrationBean registration = new FilterRegistrationBean();
- registration.setFilter(new UrlFilter());
- registration.addUrlPatterns("/*");
- registration.setName("UrlFilter");
- registration.setOrder(1);
- return registration;
- }
- }
- https://www.cnblogs.com/paddix/p/8365558.html
来源: http://www.bubuko.com/infodetail-2603596.html