Здравствуйте. У меня вопрос по поводу авторизации средствами JAAS. Я написал свой модуль авторизации (MonopolyRealm, MonopolyLoginModule). Так же в другом проекте у меня есть класс, в котором я получаю логин и пароль из HTML формы (Player). Вопрос - как передать значения логина и пароля в мой модуль авторизации? Модуль зарегистрирован в Glassfish 3.1.1. Теперь мне нужно чтобы мое приложение подхватило его при развертывании на сервере, и передало в него логин и пароль (в методе login класса Player) Заранее спасибо MonopolyRealm Код | package net.monopolyclub.monopolylogin;
import java.util.Enumeration; import java.util.Vector; import java.sql.ResultSet; import net.monopolyclub.monopolylogin.db.DBManager; import net.monopolyclub.monopolylogin.db.DerbyDBManager;
import java.sql.SQLException; import java.io.IOException; import com.sun.enterprise.security.auth.realm.IASRealm; import com.sun.enterprise.security.auth.realm.InvalidOperationException; import com.sun.enterprise.security.auth.realm.NoSuchUserException;
public class MonopolyRealm extends IASRealm { private DBManager dbManager; public MonopolyRealm () throws InvalidOperationException { super(); dbManager = new DerbyDBManager(); try { dbManager.initialize("org.apache.derby.jdbc.ClientDriver", "jdbc:derby://localhost:1527/****", "****", "****"); } catch (SQLException e) { throw new InvalidOperationException(e.getMessage()); } catch (IOException e) { throw new InvalidOperationException(e.getMessage()); } } @Override public Enumeration getGroupNames (String login) throws InvalidOperationException, NoSuchUserException { Vector vector = new Vector(); try { ResultSet rs = dbManager.select("APP.ROLES.NAME", "APP.USERS, APP.ROLES, APP.JT_USER_ROLE", "APP.USERS.LOGIN = '" + login + "' AND APP.USERS.ID = APP.JT_USER_ROLE.USER_FK AND APP.ROLES.ID = APP.JT_USER_ROLE.ROLE_FK"); while (rs.next()) { vector.add(rs.getString("NAME")); } } catch (SQLException e) { throw new InvalidOperationException(e.getMessage()); } return vector.elements(); } @Override public String getAuthType () { return "MonopolyAuth"; } @Override public String getJAASContext () { return "monopolyRealm"; } public boolean loginUser (String login, String password) throws InvalidOperationException, NoSuchUserException { boolean loginSuccessfull = false; try { ResultSet rs = dbManager.select("LOGIN", "APP.USERS", "APP.USERS.LOGIN = '" + login + "' AND APP.USERS.PASSWORD = '" + password + "'"); if (rs.next()) { loginSuccessfull = true; } else { throw new NoSuchUserException("username or password incorect"); } } catch (SQLException e) { throw new InvalidOperationException(e.getMessage()); } return loginSuccessfull; } }
|
MonopolyLoginModule Код | package net.monopolyclub.monopolylogin;
import java.util.LinkedList; import java.util.Enumeration; import com.sun.appserv.security.AppservPasswordLoginModule;
import javax.security.auth.login.LoginException; import com.sun.enterprise.security.auth.realm.InvalidOperationException; import com.sun.enterprise.security.auth.realm.NoSuchUserException;
public class MonopolyLoginModule extends AppservPasswordLoginModule { private MonopolyRealm realm; @Override protected void authenticateUser () throws LoginException { Enumeration userGroupEnum = null; LinkedList<String> userGroupList = new LinkedList<String>();
if (!(_currentRealm instanceof MonopolyRealm)) { throw new LoginException(); } else { realm = (MonopolyRealm) _currentRealm; } try { if (realm.loginUser(_username, _password)) { try { userGroupEnum = realm.getGroupNames(_username); } catch (InvalidOperationException e) { throw new LoginException(e.getMessage()); } catch (NoSuchUserException e) { throw new LoginException(e.getMessage()); }
while (userGroupEnum.hasMoreElements()) { userGroupList.add((String) userGroupEnum.nextElement()); } } else { throw new LoginException(); } } catch (InvalidOperationException e) { throw new LoginException(e.getMessage()); } catch (NoSuchUserException e) { throw new LoginException(e.getMessage()); } commitUserAuthentication(userGroupList.toArray(new String[0])); } }
|
Player Код | package net.monopolyclub.game.faces;
import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.RequestScoped; import javax.faces.event.ComponentSystemEvent; import javax.faces.context.FacesContext;
import javax.annotation.PostConstruct; import javax.ejb.EJB; import net.monopolyclub.game.ejb.PlayerEJB; import net.monopolyclub.game.faces.utils.ImplicitNavigationManagerInterface;
@ManagedBean @RequestScoped public class Player { @EJB private PlayerEJB player; @ManagedProperty("#{implicitNavigationManager}") private ImplicitNavigationManagerInterface navigator;
private String email; private String password; private String confirmPassword;
public Player () {
}
@PostConstruct public void init () { navigator.setRedirect(true); } public void checkIsAuthorized (ComponentSystemEvent cse) { navigator.jump("game"); }
public void registerNewUser () { Long id = player.addNewUser(email, password); }
public void login () { }
/* -- getters/setters -- */
public String getEmail () { return this.email; }
public void setEmail (String email) { this.email = email; }
public String getPassword () { return this.password; } public void setPassword (String password) { this.password = password; }
public String getConfirmPassword () { return this.confirmPassword; }
public void setConfirmPassword (String confirmPassword) { this.confirmPassword = confirmPassword; }
public ImplicitNavigationManagerInterface getNavigator () { return this.navigator; }
public void setNavigator (ImplicitNavigationManagerInterface navigator) { this.navigator = navigator; } }
|
|