SpringBoot中利用过滤器修改请求url地址

要求:

代码中配置的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

原文地址:https://www.cnblogs.com/hongdada/p/9046376.html

时间: 2024-11-09 08:08:07

SpringBoot中利用过滤器修改请求url地址的相关文章

Spring-Boot中Tomcat端口修改

Spring-Boot中Tomcat端口默认为8080,那么我们该如何来修改呢? 工具:eclipse ①打开eclipse,点击工具栏中的Run: ②选择Configurations(任选一个): ③进入修改页面,按下图进行设置(在VM arguments处填写-Dserver.port=**(**为你要启动的端口)) ④这样就修改成功啦,启动看看吧(不行就重启一下eclipse试试) 更多方法请参考: http://stackoverflow.com/questions/21083170/s

JavaWeb-用过滤器修改请求的返回状态码

问题: 客户SDK对接服务,默认只识别200和非200的请求状态码.需要修改当前应用的状态码(如将201转为200) 解决方案:通过扩展HttpServletResponseWrapper,获取到每个请求的状态码,满足条件的做修改即可 具体代码: package com.supermap.huawei; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import

SpringBoot中使用过滤器

场景:API的参数都是经过加密的,于是在过滤器中,将获取到的请求的参数先解密再去进行处理 一.实现Filter接口 public class TestFilter implements Filter { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public void init(FilterConfig filterConfig) throws ServletException { lo

Springboot中AOP统一处理请求日志

完善上面的代码: 现在把输出信息由先前的system.out.println()方式改为由日志输出(日志输出的信息更全面)

转载:web工程中URL地址的推荐写法

在JavaWeb开发中,只要是写URL地址,那么建议最好以"/"开头,也就是使用绝对路径的方式,那么这个"/"到底代表什么呢?可以用如下的方式来记忆"/":如果"/"是给服务器用的,则代表当前的web工程,如果"/"是给浏览器用的,则代表webapps目录. 1."/"代表当前web工程的常见应用场景 ①.ServletContext.getRealPath(String path)获取

iOS网络: 通过NSMutableURLRequest修改一个URL的请求

问题: 一个URL 请求可以改变也可以不变.一个可变的URL 请求可以在其初始化之后再进行修改,而不可变的URL 请求是不可以修改的. 你可以通过 NSMutableURLRequest 创建可修改的URL 请求. 例子: 在分配和初始化了请求之后修改请求 URL 的 timeout NSString *urlAsString = @"http://www.apple.com"; NSURL *url = [NSURL URLWithString:urlAsString]; NSMut

Java中Filter过滤器的使用

过滤器过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改.判断等,把不符合规则的请求在中途拦截或修改.也可以对响应进行过滤,拦截或修改响应.如下图,浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤.过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端.当请求通过了链中所有过滤器后就可以访问资源文件了,如果不能通过,则可能在中间某个过滤器中被处理掉.过滤

如何在React中处理REST API请求

REST API通常用于Web开发中.它们是Web应用程序用来彼此"交谈"的编程接口.它们用于访问功能部件和数据." REST"(代表性状态转移)是定义API属性的概念.本文将重点介绍如何使用基于Web的API从数据库中检索数据. Axios是一个npm软件包,允许应用程序将HTTP请求发送到Web API.要在您的React应用程序中使用Axios,请使用以下命令: npm install axios 要么 yarn add axios 在创建react组件之前,

大众点评修改用户邮箱地址时的验证过程

修改邮箱地址前先往原来的老邮箱发送一封验证邮件,点击验证邮件里面的链接,然后在出现的界面中输入新修改的邮箱地址(提示,这个邮箱地址可不能随便填写,一定要是自己的邮箱地址),点击确定以后,系统会往新的邮箱地址里面发送一封确认邮件,登录新的邮箱,点击里面的链接完成修改邮箱地址的操作. 也就是说,新的邮箱地址 及 老的邮箱地址 必须是你自己的邮箱地址,而且是可以正常登录的,需要登录邮箱以后进行操作的,随便填写一个不是自己的邮箱地址是行不通的. 老邮箱地址收到的邮件:亲爱的caihuafeng,您好!感