我的项目是Spring Boot 1.5.19和Spring Security 4.2.6和CometD 3.0.9。 在UI端日志是:CometD订阅失败。 在服务后端日志中是:org.springframework.security.authentication.AuthenticationCredentialsNotFoundException:在SecurityContext中找不到身份验证对象 位置是CorsFilter.java:chain.doFilter(req,resp);
此错误似乎并不影响功能,登录和握手以及元/连接始终可以。但是,Cometd订阅失败,并且页面始终刷新,然后将返回新数据。这不是我想要的我想获取实时数据。我不知道SecurityContext Error是否是造成此问题的原因。
@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实时数据成功运行。
答案 0 :(得分:0)
这只是我的错。 在CometdAuthenticator
中@Autowired
private List<AbstractCometDSubscribeVoter> voters = Collections.emptyList();
添加@Autowired,一切正常。