Многопользовательское безопасное Java-приложение - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть задание, которое говорит о том, чтобы сделать игру безопасной для нескольких пользователей, хотя, когда я запускаю два экземпляра этого приложения на разных вкладках одного и того же браузера, они синхронизируются и становятся одинаковыми. Есть ли способ обойти это? Кроме того, как я могу запретить двум пользователям загружать один и тот же файл сохранения, поскольку они хранятся на сервере. Я использую Jsp и сервлеты для создания этого приложения.

РЕДАКТИРОВАТЬ: здесь мой код для моего сервлета, он выполняет все операции и все мои страницы JSP просто получить объект и отобразить данные

package can;
import javax.servlet.RequestDispatcher;
import javax.servlet.*;
import java.io.FileNotFoundException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.InputStream;
import java.io.ObjectOutputStream;

public class SaveLoader extends HttpServlet
{
    public SaveLoader() {}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{

    HttpSession sesh = request.getSession();
    String username = request.getParameter("username");
    String gameType = request.getParameter("gameType");
    String closeCase = request.getParameter("closeCase");
    String proceed = request.getParameter("proceed");
    String offer = request.getParameter("offer");
    Game game;

    if(username == null && gameType == null && closeCase == null && proceed == null && offer == null)
    {
        response.sendRedirect(request.getContextPath() + "/");
        return;
    }

    //Parameters coming from homepage
    if(username != null && gameType != null)
    {
        if(gameType.equals("NG"))
        {
            game = new  Game();
            game.setUsername(username);
            sesh.setAttribute("Game", game);
            response.sendRedirect("game");
            return;
        }
        else if(gameType.equals("LG"))
        {
            response.sendRedirect(request.getContextPath() + "/");
            return;
        }
    }

    if(sesh.getAttribute("Game") == null)
    {
        response.sendRedirect(request.getContextPath() + "/");
        return;
    }
    else
    {

        //user clicks on case
        if(closeCase != null)
        {
            game = (Game) sesh.getAttribute("Game");
            if(game.getCaseLeft() != 0)
            {
                int closeCaseINT = Integer.parseInt(closeCase);
                closeCaseINT = closeCaseINT - 1;

                Briefcase[] temp = game.getBriefcase();
                temp[closeCaseINT].setOpen(true);
                game.setBriefcase(temp);

                int cases = game.getCaseLeft();
                cases = cases - 1;

                game.setCaseLeft(cases);

                response.sendRedirect("game");
                return;
            }
            else
            {
                response.sendRedirect("game");
                return;
            }
        }

        //user clicks on NEXT after opening number of cases
        if(proceed != null)
        {
            game = (Game) sesh.getAttribute("Game");
            if(proceed.equals("nxt") && game.getRoundN() != 5)
            {
                Briefcase[] temp = game.getBriefcase();
                double tempPrize = 0;
                int caseCount = 0;
                double max = 0;

                for(int i = 0; i < temp.length; i++)
                {
                    if(temp[i].isOpen() == false)
                    {
                        tempPrize += temp[i].getAmount();
                        caseCount++;

                        if(temp[i].getAmount() > max)
                        {
                            max = temp[i].getAmount();
                        }
                    }
                }
                tempPrize = tempPrize / caseCount;
                game.setMaxInPlay(max);
                game.setPrize(tempPrize);

                response.sendRedirect("bank");
                return;
            }
            else
            {
                Briefcase[] temp = game.getBriefcase();
                double tempPrize = 0;

                for(int i = 0; i < temp.length; i++)
                {
                    if(temp[i].isOpen() == false)
                    {
                        tempPrize += temp[i].getAmount();
                    }
                }
                game.setPrize(tempPrize);

                response.sendRedirect("end");
                return;
            }
        }

        //bank offer Deal or No deal
        if(offer != null)
        {
            game = (Game) sesh.getAttribute("Game");
            int temp = game.getRoundN();
            temp++;
            game.setRoundN(temp);

            if(offer.equals("NoDeal"))
            {
                game.setPrize(0);
                game.setMaxInPlay(0.0);
                response.sendRedirect("game");
                return;
            }
            else if(offer.equals("Deal"))
            {
                response.sendRedirect("end");
                return;
            }
        }
    }
}

}

вот что все мои jsp-страницы используют для получения объекта

<%
  HttpSession sesh = request.getSession();
  Game game = (Game) sesh.getAttribute("Game");

  if(game == null)
     {
        response.sendRedirect(request.getContextPath() + "/");
        return;
    }
  %>
...