Springboot: внедрение зависимости в фильтре не работает - PullRequest
1 голос
/ 29 мая 2020

Я работаю над приложением Springboot. Он содержит несколько фильтров. Для одного из недавно представленных фильтров я хочу внедрить bean-компонент. Однако при попытке внедрить bean-компонент я получаю следующую ошибку:

Метод вызвал исключение 'java .lang.UnsupportedOperationException'. Невозможно оценить com.test.api.filter.RContext $$ EnhancerBySpringCGLIB $$ 4bbc6342.toString ()

Фильтр:

@Component
public class ContextFilter implements Filter {
    private final static Logger LOG = LoggerFactory.getLogger(ContextFilter.class);

    @Autowired
    RContext rContext;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        LOG.info("Processing context filter");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        LOG.info("Start..", 
        rContext.setContextData("Test data");
        LOG.info("Done..", req.getRequestURI());
    }

    @Override
    public void destroy() {

    }
}

RContext class:

@Scope(value="request", proxyMode= ScopedProxyMode.TARGET_CLASS)
public class RContext {

    String user;
    String contextData;
    String activeProfile;

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getContextData() {
        return contextData;
    }

    public void setContextData(String contextData) {
        this.contextData = contextData;
    }

    public String getActiveProfile() {
        return activeProfile;
    }

    public void setActiveProfile(String activeProfile) {
        this.activeProfile = activeProfile;
    }
}



1 Ответ

0 голосов
/ 31 августа 2020

Если бы вы могли аннотировать класс RContext с помощью @Service, то в методе doFilter могло бы работать следующее решение:

RContext rContext;

ServletContext servletContext = request.getServletContext();
WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(servletContext);
rContext = wac.getBean(RContext.class);
...