我正在爲Intranet構建Web應用程序。我需要實現單點登錄,即基於他的系統(PC /筆記本電腦)用戶名對用戶進行身份驗證。直到今天,我非常高興,因爲每次我測試我的登錄頁面時,基本上都會選擇我的系統用戶名,並且不需要用戶名就可以登錄。那是我需要的。但是,今天只是爲了在我打開登錄頁面時從Intranet中的另一個系統測試我的應用程序,它仍然選取了我自己的用戶名。只是爲了讓事情更清楚一點就是例如。如果我的系統名稱爲User1,則此登錄頁面將啓動User1並向數據庫進行身份驗證,並將我帶到主頁。但是,當我從具有用戶名User2的不同系統測試我的登錄頁面時。登錄頁面仍然選取我自己的系統用戶名,即User1而不是User2,因爲我從系統User2登錄。如何獲取打開我的網頁的系統的用戶名
有人可以拋出我的錯誤或我錯過了包括的東西。是username = 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;
}
}
OK,所以我想以我目前的研究結果,什麼我實現了一個前一陣子延長我的問題。下面是我寫的從系統獲取用戶名的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。下一步我完全無能爲力。試圖谷歌的答案,但我能理解的是,我必須現在寫一個javaScript?爲了設置applet拾取的用戶名的值。現在有誰可以引導我,下一步應該是什麼?我現在怎麼能傳遞系統用戶名到我的loginBean而不提示用戶輸入?
非常感謝!我真的受到了錯誤的印象。現在的問題是,我沒有使用LDAP/SSO的經驗,Java applet可以請你給我推薦一個快速閱讀/使用指南來實現這個功能嗎?這將非常有幫助!提前感謝! (同時當然我會嘗試閱讀你已經提供的答案中的所有鏈接) – sushantpandey
這是服務器管理員的責任,而不是Web開發人員。但如果您有興趣,請使用關鍵字「[servername] sso ldap」進行搜索,例如[this](http://google.com/search?q=glassfish+sso+ldap) – BalusC
我用我的代碼更新了我的問題爲小程序,然後從xhtml小片段,現在嵌入我的小程序。如果有人現在可以引導我進入下一個適當的步驟,那將是非常棒的。因爲在下一步在Google上花費了很多時間之後,我感覺完全顛倒了。什麼最好的我可以拿起是現在我必須寫JavaScript來設置用戶名的值?請在這方面給我建議。非常感謝!!! – sushantpandey