Прямой вход в приложение Struts 2 с использованием интеграции LDAP - PullRequest
0 голосов
/ 10 июля 2019

Я работаю над базовым веб-приложением Struts2, так что сейчас у нас есть три пользователя: администратор, оператор и гость, теперь требуется клиент, страницы входа в приложение нет, однако приложение интегрировано. с LDAP, поэтому при каждом обращении к URL действия входа в систему пользователь автоматически входит в приложение.

теперь есть несколько URL, таких как "Downloadchapter.action" и "uploadchapter.action"

пользователь "opertaors" часто использует uploadchapter.action URL, они хотят использовать прямой URL так же, как и страницу входа, они не хотят посещать страницу входа каждый раз, они хочу напрямую нажать на URL загруженной главы.

Но проблема в том, что когда они напрямую нажимают на uploadchapter.action после закрытия браузера , URL не отображал никаких данных.

Я отладил код и обнаружил, что сессия истекает после закрытия браузера, когда в следующий раз оператор обращается к URL, отличному от имени входа, чем я обнаружил, что не найден userId.

как мне сохранить тот же сеанс после закрытия браузера, как в gmail? потому что, когда оператор закрыл браузер и снова открыл его и попытался нажать на uploadchapter.action url, он мог войти в систему, потому что LDAP интегрирован там.

Пожалуйста, помогите мне достичь того же. приведенный ниже фрагмент показывает логику.

LoginAction

public String authenticateAD()
  {
    logger.debug("Start authenticateAD=" + System.currentTimeMillis());
    setPage("login");
    setRole("login");
    boolean validate = true;
    userId = getServletRequest().getRemoteUser();
    if (userId == null) {
      return "error";
    }
    if (userId.lastIndexOf("\\") > 0) {
      userId = userId.substring(userId.lastIndexOf("\\") + 1).trim();
    }
    logger.debug("UserId=" + userId);
    if (validate) {
      LDAPIntegration authentication = new LDAPIntegration();
      String group = "";
      try
      {
        List<String> groupList = new ArrayList();
        groupList = authentication.getUserGroups(userId);
        String role = "";
        if ((groupList != null) && (!groupList.isEmpty())) {
            List<String> interList=new ArrayList<String>();
            for(int i=0;i<groupList.size();i++){
                 group = groupList.get(i);
                                logger.info("groupList group:" + group);
                                 StringTokenizer st = new StringTokenizer(group);
                                 while (st.hasMoreTokens()) {
                                   if (st.countTokens() == 1) {
                                     interList.add(st.nextToken());
                                   } else {
                                     st.nextToken();
                                   }
                                 }
                }
            Collections.sort(interList);
            logger.info("Sorted InnerList of Role: "+interList.toString());
            if(interList.contains("Administrators"))
                role="Administrators";
                else if(interList.contains("Operators"))
                    role="Operators";
                else if(interList.contains("Guests") && interList.size()==1)
                    role="Guests";
                else
                    for(int j=0;j<interList.size();j++){
                    if(!interList.get(j).equalsIgnoreCase("Guests"))
                        role=interList.get(j);
                    }
            for(int k=0;k<groupList.size();k++){
                if(!groupList.get(k).contains("Administrators") || !groupList.get(k).contains("Operators") || !groupList.get(k).contains("Guests"))
                    group=groupList.get(k);
            }
           /*group = (String)groupList.get(0);*/
          logger.debug("groupList group:" + group);
         /* StringTokenizer st = new StringTokenizer(group);
          while (st.hasMoreTokens()) {
            if (st.countTokens() == 1) {
              role = st.nextToken();
            } else {
              st.nextToken();
            }
          }*/
        } else {
          throw new CustomException("INVALID_USER"); 
          }
        if (!role.toLowerCase().equalsIgnoreCase(
          "Administrators".toLowerCase()))
          if (!role.toLowerCase().equalsIgnoreCase(
            "Operators".toLowerCase()))
            if (!role.toLowerCase().equalsIgnoreCase(
              "Guests".toLowerCase()))
            {
            if (group.toLowerCase().indexOf("area manager".toLowerCase()) != -1) {
                String areaName = null;
                List<String> areaNameList = new ArrayList();

                for (int i = 0; i < groupList.size(); i++) {
                  group = (String)groupList.get(i);
                  if (group.toLowerCase().indexOf("area manager".toLowerCase()) != -1) {
                    logger.debug("areamanager groupList group:" + group);
                    if (group.toLowerCase().contains("area manager-")) {
                      areaName = group.substring(group.indexOf("Download Area") + 14, group.length()).trim();
                    } else {
                      areaName = group.substring(group.indexOf("Area Manager") + 12, group.length()).trim();
                    }

                    logger.info("areaName:" + areaName);

                    if (areaName != null) {
                      areaNameList.add(areaName);
                    }
                  }
                }


                logger.debug("areaNameList===" + areaNameList);

                setArea(areaNameList);
                role = "area manager";
              }
              else {
                throw new CustomException("INVALID_ROLE");
              } }
        setUserGroup(groupList);
        logger.info("authenticateAD groupList: "+groupList);
        logger.info("authenticateAD Role: "+role);
        logger.info("authenticateAD userId: "+userId);
        setRole(role);
        setUser(userId);
        logger.info("Get Methods in authenticateAD !!");
        logger.info("authenticateAD Role: "+getRole());
        logger.info("authenticateAD user: "+getUser());
        logger.info("authenticateAD userId: "+getUserId());
        logger.info("authenticateAD group List: "+getUserGroup().toString());
        logger.debug("Get Methods in authenticateAD !!");
        logger.debug("authenticateAD Role: "+getRole());
        logger.debug("authenticateAD user: "+getUser());
        logger.debug("authenticateAD userId: "+getUserId());
        logger.debug("authenticateAD group List: "+getUserGroup().toString());
        logger.debug("End authenticateAD=" + System.currentTimeMillis());
        return "success";
      }
      catch (CustomException e) {
        logger.error("error in authenticateAD ", e);
        if (e.getMessage().equalsIgnoreCase("NETWORK_ERROR")) {
          addActionError(manager.getValue("login.network.error"));
        } else if (e.getMessage().equalsIgnoreCase("INVALID_USER")) {
          addActionError(manager.getValue("login.invalid.user"));
        } else if (e.getMessage().equalsIgnoreCase("INVALID_ROLE")) {
          addActionError(manager.getValue("login.invalid.role"));
        }
      }
    }

    return "error";
  }

UploadChapterAction.java

Фрагмент, который используется для просмотра страницы при переходе по URL-адресу

private void prepareUploadChapter() {
        noSiteFound = true;
        if (getRole() == null) {
//I wrote the below two lines, but as I wrote above in description, due to userId null the below code fails
            LoginAction loginAction=new LoginAction();
            loginAction.directLoginAuthenticateAD();
//          return;
        }
        //if (getRole().equals(AppConstants.OPERATOR)) { // Old condition for ITPM-48
        if (getRole().equals(AppConstants.OPERATOR) || getRole().equals(AppConstants.AREA_MANAGER) ) {
            this.divisions = new ArrayList<Division>();
            this.sites = new ArrayList<Site>();
            //this.divisions = AdminManager.getInstance().getDivisions();
            //this.sites = AdminManager.getInstance().getAllSites(divId);
            List<String> groups = getUserGroup();
           //// LOT CODE GOES HERE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...