Spring自定义筛选器无法使用服务层方法

Spring自定义筛选器无法使用服务层方法,spring,spring-boot,filter,servlet-filters,Spring,Spring Boot,Filter,Servlet Filters,我找到了解决方案,但我不明白为什么这样做有效,但另一个不行 问题是,当我将ServletRequest强制转换为HttpServletReuqest并将请求传递给其中一个服务方法时,它就停在那里了。它试图抛出错误,我不确定 当我在控制器中使用服务方法时,该方法工作正常。(当我将相同的代码复制到筛选器类时,该问题已得到解决。。但我不理解为什么在服务中使用它时,它会中断,但当我在servlet筛选器类中使用它时,它工作正常) 这是我的密码: public class AdminFilter exte

我找到了解决方案,但我不明白为什么这样做有效,但另一个不行

问题是,当我将ServletRequest强制转换为HttpServletReuqest并将请求传递给其中一个服务方法时,它就停在那里了。它试图抛出错误,我不确定

当我在控制器中使用服务方法时,该方法工作正常。(当我将相同的代码复制到筛选器类时,该问题已得到解决。。但我不理解为什么在服务中使用它时,它会中断,但当我在servlet筛选器类中使用它时,它工作正常)

这是我的密码:

public class AdminFilter extends GenericFilterBean { 

private final static Logger LOGGER = LogManager.getLogger("alog");
@Autowired
AccessService accessService;

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
        throws IOException, ServletException {

    HttpServletRequest httpRequest = (HttpServletRequest) request;

    if(request == null) {
        LOGGER.trace("request is null... why?"); //it was not null
    }
    if(httpRequest == null) {
        LOGGER.trace("httpRequest(after the cast) is null... why?");//it was not null
    }
    try {
        if (accessService.isAdmin(httpRequest)) {
            LOGGER.trace("User is Admin");
            filterChain.doFilter(request, response);
        }
    }
    catch (Exception E) {
        LOGGER.error("Request is empty : " + E.getStackTrace());//stack trace just gets null exception for not having a sepcific error handling 
    }

}
下面是我的服务层方法:

    public boolean isAdmin(HttpServletRequest request) {
        LOGGER.trace("checking if the user is admin"); //this is never triggered.
        String user = request.getRemoteUser();

        //some logic here
        if (//some logic here) {
            //some logic here
            return true;
        }
        else {
            return false;   
        }
    }   
因此,当它点击“isAdmin(请求)”时,代码就会中断

但是如果我不使用自动连接的服务方法,它就可以正常工作

如果我只是将准确的代码复制并粘贴到AdminFilter类中,然后像下面这样使用代码,它就会工作

if (isAdmin(httpRequest)) 


//instead of   
if (accessService.isAdmin(httpRequest)) 

我知道我有解决办法。。但我真的很想了解为什么…

这是您的autowird服务的正确实现方式吗?调试并查看该服务是否为null或其他impl?

让我猜猜,该服务不是自动连接的,而是null。您好。我知道这是一个有点老的帖子,但我想分享我的发现。我确认@Autowired的东西是空的。。。我只是有点困惑,因为它是在我的本地工作,但当我尝试在远程它不是。研究表明,我不能将autowire与servlet过滤器一起使用,因为servlet过滤器是与web.xml连接在一起的。