java—是否可以对spring引导应用程序的传入http请求运行检查?

jjhzyzn0  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(344)

我只是想知道是否有可能在每个传入到我的端点的请求上运行一个函数,除了那些用户不需要进行身份验证的函数,例如/registeruser。我只想检查他们的firebase令牌是否正确,这是在请求的头中发送的。
我在topc上发现了这样一个帖子:如何在过滤器中处理传入的http请求以进行身份验证?怎么都没有答案。

i34xakig

i34xakig1#

你不能要求提供关于堆栈溢出的教程,你的问题是一个简单的“是”或“否”答案。
所以你的问题的答案是肯定的,这是可以做到的。但是你没有提供任何代码,任何你想做什么的信息,目的或者代码示例,所以这就是你问题的答案。
是的,您可以使用过滤器对每个请求运行一个函数。我将链接springsecurityjwt文档以获得更好的度量。

clj7thdc

clj7thdc2#

我会这样做:

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@Component
public class MyFilter implements Filter{
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;

        String header = httpServletRequest.getHeader("YourHeader");
        // do more stuff with it

        filterChain.doFilter(httpServletRequest, servletResponse);        
    }

    @Bean
    public FilterRegistrationBean<MyFilter> myFilterRegistration(){
        FilterRegistrationBean<MyFilter> registrationBean
                = new FilterRegistrationBean<>();

        registrationBean.setFilter(new MyFilter());
        registrationBean.addUrlPatterns("/registerUser/*");

        return registrationBean;
    }
}

myfilter是一个过滤器,它对请求及其头执行任何需要的操作。它需要类型转换为httpservletrequest,因为基本servletrequest对头一无所知。因此,根据应用程序的不同,您可能需要进行类型检查。
然后我定义了filterregistrationbean类型的bean,它注册myfilter并使用url模式仅在某些情况下应用它,就像您需要的那样。

相关问题