Я создаю веб-приложение для интрасети. И я должен был выполнить единый знак на i.e аутентифицировать пользователя на основе его системного (pc/laptop) имени пользователя. До сегодняшнего дня я был очень счастлив, так как каждый раз я тестировал свою страницу входа в систему, которая в основном выбирает имя моей системы и регистрирует меня, не запрашивая имя пользователя. Это то, что мне нужно. Однако сегодня просто для проверки моего приложения из другой системы в интранете, когда я открыл страницу входа в систему, он все равно взял свое собственное имя пользователя. Просто, чтобы сделать вещи более ясными здесь, например, напр. если имя моей системы User1, эта страница входа в систему shud подбирает User1 и проходит проверку подлинности с помощью базы данных и выводит меня на домашнюю страницу. Однако, когда я тестировал свою страницу входа из другой системы, которая имеет имя пользователя User2. Страница входа в систему по-прежнему загружала мое собственное имя пользователя системы, то есть User1, а не User2, так как я входил в систему из системы User2.Как подобрать имя пользователя системы, открыв мою веб-страницу
Может кто-то прольет свет на мою ошибку или что-то, что я пропустил, чтобы включить. Имя пользователя = System.getProperty ("user.name"); правильный метод для выбора имени пользователя из разных систем, входящих в мою страницу входа?
Некоторые подробности о конфигурации:
- Glassfish V3.1.2
- JSF2.0 (все страницы в XHTML включая страницы входа)
- JPA EclipseLink
- SQLServer2008 R2
Вот мой код класса кода кода
public boolean validateUser(String username) {
String sysName = System.getProperty("user.name");
System.out.println("System User is: " + sysName);
if (username.equalsIgnoreCase(sysName)) {
String checkUser = (String) entityManager
.createQuery(
"select u.username from User u where u.username =:username")
.setParameter("username", username).getSingleResult();
System.out.println("User found in database: " + checkUser);
if (checkUser.equalsIgnoreCase(username)) {
System.out.println("Loggin sucessful!");
return true;
} else {
System.out
.println("User does not exists in the system. Thus second failed");
return false;
}
} else {
System.out
.println("User not logged in from own system thus first failed");
return false;
}
}
Мой ManagedBean код класса фрагмент
public String username = System.getProperty("user.name");
// private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String login() {
FacesContext context = FacesContext.getCurrentInstance();
if (uDB.validateUser(username)) {
userId = uDB.findUser(username);
context.getExternalContext().getSessionMap().put("userId", userId);
if (uGDB.validateGroup(userId)) {
return "home.jsf?faces-redirect=true&includeViewParams=true";
}
return "normalHome.jsf?faces-redirect=true&includeViewParams=true";
} else {
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary("Username doesn't exists! OR User is trying to login from someone else's account");
context.addMessage("", message);
return null;
}
}
ОК, так что я думал, чтобы продлить мой вопрос с моими текущими результатами и тем, что я реализовал некоторое время назад. Ниже мой SSOApplet.class я написал, чтобы получить имя пользователя из системы.
SSOApplet.class
import java.applet.Applet;
public class SSOApplet extends Applet {
/**
*
*/
private static final long serialVersionUID = 1L;
String sysUser = null;
public String getSystemUsername() {
try {
sysUser = System.getProperty("user.name");
return sysUser;
} catch (Exception e) {
System.out.println(e);
return null;
}
}
}
И тогда я включил его в мою страницу XHTML внутри тела
<object>
<param name="myApplet" value="SSOApplet.class" />
</object>
Теперь пытаются найти, как я могу передать эту строку значение из апплета loginBean. На следующем шаге я совершенно не знаю. Попробовал ответить Google, но все, что я мог понять, это мне теперь написать javaScript? Чтобы установить значение имени пользователя, которое апплет взял. Может ли кто-нибудь, пожалуйста, направить меня сейчас, какой должен быть мой правильный следующий шаг? Как я могу передать системное имя пользователя в свой loginBean без запроса пользователя для ввода?
Большое спасибо !!! У меня действительно было неправильное впечатление. Теперь проблема в том, что у меня нет опыта в использовании LDAP/SSO, Java-апплета, можете ли вы предложить мне быстрое чтение/руководство для его использования? Это будет действительно большая помощь! Заранее большое спасибо! (Между тем, конечно, я попытаюсь прочитать все, что мог, из ссылки, которую вы уже предоставили в ответ) – sushantpandey
Это ответственность администратора сервера, а не веб-разработчика. Но если вам интересно, найдите вокруг себя ключевые слова «[имя_сервера] sso ldap», например [this] (http://google.com/search?q=glassfish+sso+ldap) – BalusC
Я обновил свой вопрос с помощью своего кода для апплета, а затем небольшой фрагмент из xhtml, который теперь внедряет мой апплет. Было бы действительно здорово, если бы кто-то теперь мог привести меня к следующему соответствующему шагу. Потому что, проведя так много времени на Google для следующего шага, я чувствую себя полностью перевернутым. Что я могу получить, так это то, что теперь мне нужно написать JavaScript, чтобы установить значение для имени пользователя? Пожалуйста, посоветуйте мне об этом. Большое спасибо!!! – sushantpandey