Spring Boot + CometD + CorFilter: объект аутентификации не найден в SecurityContext - PullRequest
0 голосов
/ 14 июня 2019

Мой проект - Spring Boot 1.5.19 и Spring Security 4.2.6 и CometD 3.0.9. В журнале на стороне пользовательского интерфейса есть: CometD Subscribe Failed. В фоновом журнале служб: org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: объект аутентификации не найден в SecurityContext Расположение: CorsFilter.java: chain.doFilter (req, resp);

Эта ошибка, похоже, не влияет на функции, логин и рукопожатие, а также мета / соединение всегда в порядке Однако, Cometd Subscribe Failed и страница всегда обновляется, тогда возвращаются новые данные. Это не то, что я хочу. Я хочу получить данные в реальном времени. Я не знаю, является ли причиной этой проблемы ошибка SecurityContext.

@Component
@Order(0)
public class CorsFilter implements Filter{

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) resp;
        HttpServletRequest request = (HttpServletRequest) req;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN");

        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
            response.setStatus(HttpServletResponse.SC_OK);
        } else {
            chain.doFilter(req, resp);
        }

    }

    @Override
    public void destroy() {

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {

    }
}

Надеюсь, что нет ошибок, и данные CometD в реальном времени будут успешно запущены.

1 Ответ

0 голосов
/ 14 июня 2019

Это моя вина.В CometdAuthenticator

@Autowired
private List<AbstractCometDSubscribeVoter> voters = Collections.emptyList();

добавьте @Autowired, все работает хорошо.

...