2014-05-15 223 views
1

我已經使用JSF(NetBeans的)現在我想使這個簡單的登錄爲Active Directory身份驗證如何做到這一點創建簡單的登錄頁面..JSF Active Directory身份驗證

****我XHTML代碼* ***

<h:head> 
    <title>LogIn</title> 
    <h:outputStylesheet library="css" name="style.css"/> 
</h:head> 
<h:body> 
    <h:form> 
    <fieldset> 
    <legend>LogIn</legend> 
    <p:messages autoUpdate="true" severity="info" closable="false" /> 
    <div styleclass="label"> 
     <h:outputLabel id="usernameOutputId" value="Username : " /> 
    </div> 
    <div styleclass="textbox"> 
     <h:inputText id="usernameInputId" value="#{userLogin.userName}" 
     required="true" requiredMessage="Enter username" size="20" /> 
     <br/> 
     <span><h:message for="usernameInputId" errorClass="errorMessage" /></span> 
    </div> 
    <br/> 
    <div styleclass="label"> 
     <h:outputLabel id="passwordOutputId" value="Password : " /> 
    </div> 
    <div styleclass="textbox"> 
     <h:inputSecret id="passwordInputId" value="#{userLogin.password}" 
     required="true" requiredMessage="Enter password" size="20" /> 
     <br/> 
     <span><h:message for="passwordInputId" errorClass="errorMessage" /></span> 
    </div> 
    <br/> 
    <h:commandButton id="userLoginCmdBtnId" value="LOGIN" 
        action="#{userLogin.Process}" /> 
    </fieldset> 

</h:form> 
</h:body> 
</html> 

**我的Java代碼*****

package login; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 
import javax.faces.application.FacesMessage; 


import javax.faces.bean.ManagedBean; 


import javax.faces.bean.SessionScoped; 
import javax.faces.context.FacesContext; 

@ManagedBean(name = "userLogin") 
@SessionScoped 
public class LogIn { 

public String userName; 
public String password; 
public FacesMessage message; 

public String getUserName() { 
    return userName; 
} 

public void setUserName(String userName) { 
    this.userName = userName; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

public FacesMessage getMessage() { 
    return message; 
} 

public void setMessage(FacesMessage message) { 
    this.message = message; 
} 


public String Process() throws Exception { 

    Connection c = null; 
     Statement st = null; 
       Class.forName("org.postgresql.Driver"); 
     c = DriverManager 
      .getConnection("jdbc:postgresql://localhost:5432/test", 
      "postgres", "admin"); 
     c.setAutoCommit(false); 
     System.out.println("Opened database successfully"); 

     st = c.createStatement(); 
     ResultSet res = st.executeQuery("SELECT * FROM users;"); 


     String sql="select * from users"; 
     res=st.executeQuery(sql); 

     while(res.next()) 
     { 
     System.out.println("hiii"); 
     System.out.println(res.getString(1)); 
     System.out.println("Uid="+userName); 
      if (userName.equalsIgnoreCase(res.getString(1)) 
         && password.equalsIgnoreCase(res.getString(2))) 
         { 
          System.out.println("Login Successful"); 
          return "success"; 
      } 
         else{ 
           message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Authentication Failed Earror.", ""); 
           FacesContext.getCurrentInstance().addMessage(null, message); 
           return "failure"; 

         } 

       } 

      return""; 
} 

回答

0

試試樣T他使用LDAP protocal到Active Directory

Hashtable<String, String> props = new Hashtable<String, String>(); 
      String principalName = userName + "@" + "MYDOMAIN"; 
      props.put(Context.SECURITY_PRINCIPAL, principalName); 
      props.put(Context.SECURITY_CREDENTIALS, password); 
      DirContext context = null; 
      context = LdapCtxFactory.getLdapCtxInstance("ldap://ad.mydomain:389", props); 
      System.out.println("User login successful: "); 

替換登錄您的正確的域和LDAP URL(和端口)的代碼。

如果您到達System.out.println行,則登錄成功,否則您將得到 javax.naming.AuthenticationException異常。

相關問題