Я работаю над базовым веб-приложением 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