Веб-сокет JSR 356 с Spring MVC не может подключиться через Cross Origin - PullRequest
0 голосов
/ 06 октября 2018

Я создал веб-сокет JSR 356 в Spring mvc с именем / rtisTrackDataGIS и хотел подключить его в требуемом js (внешний интерфейс ip = 192.168.101.158), а ip сервера - 192.168.113.157, поэтому в основном я подключаюсь квеб-сокет над перекрестными источниками и

@ServerEndpoint( value="/rtisTrackDataGIS", configurator = SpringConfigurator.class, encoders = {WebSocketDataEncoder.class} )
public class SendTrainsInfoToClients  {


    UtilService utilService;

    static ScheduledExecutorService timer = Executors.newSingleThreadScheduledExecutor();
    private static Set<Session> allSessions= Collections.synchronizedSet(new HashSet<Session>());

    @Autowired
    public void SendTrainsInfoToClients(UtilService utilService){
        this.utilService = utilService;
    }


    @OnOpen
    public void showRTISGISData(Session session){
        allSessions.add(session);       
        // start the scheduler on the very first connection 
        // to call sendRTISGISDataToAll every second
        if(allSessions.size() == 1){
            System.out.println("Ok WebSocket opened - session id : " + session.getId());
            timer.scheduleAtFixedRate(()->sendRTISGISDataToAll(), 0, 120, TimeUnit.SECONDS);
        }
    }
    @OnClose
    public void onClose(Session session){
        System.out.println("WebSocket Closed - session id : " + session.getId());
        allSessions.remove(session);
    }
    private void sendRTISGISDataToAll(){
        String data = null;
        if(allSessions.size() >= 1){
            data ="sadasdad";
        }
        //System.out.println(data);
        for(Session sess: allSessions){
            try{
                //System.out.println("Sending Trains Track data to client with session id "+sess.getId());
                sess.getBasicRemote().sendText(data);
                //sess.getBasicRemote().sendObject(jsonObject);;
            } catch(IOException ioe) {
                System.out.println(ioe.getMessage());
            } catch(Exception ex){
                System.out.println(ex.getMessage());
            }
        }
    }

    public static void sendGISDataToAll(String message){
        String data = null;
        if(allSessions.size() >= 1){
            data ="sadasdad";
        }
        //System.out.println(data);
        for(Session sess: allSessions){
            try{
                //System.out.println("Sending Trains Track data to client with session id "+sess.getId());
                sess.getBasicRemote().sendText(message);
                //sess.getBasicRemote().sendObject(jsonObject);;
            } catch(IOException ioe) {
                System.out.println(ioe.getMessage());
            } catch(Exception ex){
                System.out.println(ex.getMessage());
            }
        }
    }
}

, и я также включил corsfilter и добавил сервер в качестве перекрестного источника, это прекрасно работает с остальным контроллером API, но не подключает веб-сокет, который я создал

public class CORSFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
    System.out.println(
                "Request Character: " + req.getRemoteAddr() + "--" + ((HttpServletRequest)req).getRequestURL() + "--" + ((HttpServletRequest) req).getMethod());
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request=(HttpServletRequest)req;
        // System.out.println("Response Character: ");
        response.setHeader("Access-Control-Allow-Origin","https://192.168.101.158:8443");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");//
        response.setHeader("Access-Control-Max-Age", "3600");//prevous was 3600
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"); //
        response.setHeader("Access-Control-Allow-Credentials", "true");
        if("OPTIONS".equalsIgnoreCase(request.getMethod()))
        {   
            response.setStatus(HttpServletResponse.SC_CREATED);
        }
        else
        chain.doFilter(req, res);
    }

    @Override
    public void init(FilterConfig filterConfig) {
    }

    @Override
    public void destroy() {
    }

}   

и подключил веб-сокет с 192.168.101.158 к 192.168.113.157

var socket = Socket("https://192.168.113.157:8443/HLS_BACKEND/rtisTrackDataGIS");
    socket.on("message", function(event){
        var data = event.data;
       console.log(data);///////////////////////////////////

, затем я не могу подключиться, могу ли я указать какие-либо cors = в @ ServerEndpoint

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...