[jboss-user] [JBoss Portal] - Re: Looking for Jar file for org.jboss.portal.identity.User

cry4dawn do-not-reply at jboss.com
Thu Oct 18 17:58:17 EDT 2007


the UserPrinciple:


  | package com.xxx.database;
  | 
  | import java.security.Principal;
  | 
  | /**
  |  * 
  |  */
  | public final class UserPrincipal implements Principal {
  | 
  | 	private final String name;
  | 
  | 	/**
  | 	 * @param nameIn
  | 	 *            
  | 	 */
  | 	public UserPrincipal(final String nameIn) {
  | 		if (nameIn == null) {
  | 			throw new IllegalArgumentException("No null principal name accepted");
  | 		}
  | 		this.name = nameIn;
  | 	}
  | 
  | 	/**
  | 	 * @param o
  | 	 *            Object
  | 	 * @return boolean aanderson Aug 7, 2007
  | 	 * @see java.lang.Object#equals(java.lang.Object)
  | 	 */
  | 	@Override
  | 	public boolean equals(final Object o) {
  | 		if (o == this) {
  | 			return true;
  | 		}
  | 		if (o instanceof Principal) {
  | 			final Principal that = (Principal) o;
  | 			return this.name.equals(that.getName());
  | 		}
  | 		return false;
  | 	}
  | 
  | 	/**
  | 	 * @return String 
  | 	 * @see java.security.Principal#getName()
  | 	 */
  | 	public String getName() {
  | 		return this.name;
  | 	}
  | 
  | 	/**
  | 	 * @return int 
  | 	 * @see java.lang.Object#hashCode()
  | 	 */
  | 	@Override
  | 	public int hashCode() {
  | 		return this.name.hashCode();
  | 	}
  | 
  | 	/**
  | 	 * @return String
  | 	 * @see java.lang.Object#toString()
  | 	 */
  | 	@Override
  | 	public String toString() {
  | 		return "PortalPrincipal[" + this.name + "]";
  | 	}
  | }
  | 
  | 

and the custom module:


  | /**
  |  * HMIDataBaseLoginModule
  |  * 
  |  */
  | package com.xxx.database;
  | 
  | import java.io.IOException;
  | import java.security.acl.Group;
  | import java.sql.SQLException;
  | import java.util.Map;
  | 
  | import javax.security.auth.Subject;
  | import javax.security.auth.callback.Callback;
  | import javax.security.auth.callback.CallbackHandler;
  | import javax.security.auth.callback.NameCallback;
  | import javax.security.auth.callback.UnsupportedCallbackException;
  | import javax.security.auth.login.FailedLoginException;
  | import javax.security.auth.login.LoginException;
  | 
  | import org.jboss.security.auth.spi.DatabaseServerLoginModule;
  | 
  | /**
  |  * 
  |  */
  | public final class HMIDataBaseLoginModule extends DatabaseServerLoginModule {
  | 
  | 	private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(HMIDataBaseLoginModule.class);
  | 	private String dsJndiName = "java:/OracleDS";
  | 	// do not remove this field
  | 	private UserPrincipal identity;
  | 	//private long lockoutTime;;
  | 	private int maxRetries;
  | 
  | 	/**
  | 	 * @param subjectIn {@link Subject}
  | 	 * @param callbackHandlerIn {@link CallbackHandler}
  | 	 * @param sharedStateIn {@link Map}
  | 	 * @param optionsIn {@link Map}
  | 	 * @see org.jboss.security.auth.spi.DatabaseServerLoginModule#initialize(javax.security.auth.Subject, javax.security.auth.callback.CallbackHandler, java.util.Map, java.util.Map)
  | 	 */
  | 	@Override
  | 	public void initialize(final Subject subjectIn, final CallbackHandler callbackHandlerIn, final Map sharedStateIn, final Map optionsIn) {
  | 		super.initialize(subjectIn, callbackHandlerIn, sharedStateIn, optionsIn);
  | 		LOG.info("Initializing LoginModule");
  | 		try {
  | 			this.maxRetries = Integer.valueOf((String) optionsIn.get("maxRetries")).intValue();
  | 			this.dsJndiName = (String) optionsIn.get("dsJndiName");
  | 			//this.lockoutTime = Long.valueOf((String) optionsIn.get("lockTimeMillies")).longValue();
  | 			this.callbackHandler = callbackHandlerIn;
  | 			if (this.callbackHandler == null) {
  | 				this.callbackHandler = new HMICallbackHandler();
  | 			}
  | 		} catch (final Throwable e) {
  | 			HMIDataBaseLoginModule.LOG.error("Error initializing", e);
  | 		}
  | 		HMIDataBaseLoginModule.LOG.debug("LoginModule initialized");
  | 	}
  | 
  | 	/**
  | 	 * @return boolean
  | 	 * @throws LoginException le
  | 	 * 
  | 	 * @see org.jboss.security.auth.spi.UsernamePasswordLoginModule#login()
  | 	 */
  | 	@Override
  | 	public boolean login() throws LoginException {
  | 		HMIDataBaseLoginModule.LOG.debug("in HMIDataBaseLoginModule.login");
  | 		if (this.callbackHandler == null) {
  | 			throw new LoginException("No callback handler is available");
  | 		}
  | 		if (super.login()) {
  | 			// do not remove this line, super implementation needs it
  | 			final Object username = this.sharedState.get("javax.security.auth.login.name");
  | 		}
  | 		final String name = this.getUsername();
  | 		User user = null;
  |         try {
  | 	        user = DatabaseLoginDAO.getDAO(this.dsJndiName).getThisUser(name);
  |         } catch (SQLException e) {
  |         	super.loginOk = false;
  | 			throw new FailedLoginException("Database lookup failed");
  |         }
  |         if (user == null) {
  |         	super.loginOk = false;
  | 			throw new FailedLoginException("No such user");
  |         }
  | 		if (user.isUserTermed()) {
  | 			super.loginOk = false;
  | 			throw new FailedLoginException("User is Termed");
  | 		}
  | 		final Callback[] callbacks = new Callback[1];
  | 		callbacks[0] = new NameCallback("hmiLogin", name);
  | 		String named = null;
  | 		try {
  | 			this.callbackHandler.handle(callbacks);
  | 			named = ((NameCallback) callbacks[0]).getName();
  | 		} catch (final IOException ioe) {
  | 			throw new LoginException(ioe.toString());
  | 		} catch (final UnsupportedCallbackException ce) {
  | 			throw new LoginException("Error: " + ce.getCallback().toString());
  | 		}
  | 		user = this.incrementCounter(user);
  | 		if (this.getCounter(user) > this.maxRetries) {
  | 			super.loginOk = false;
  | 			throw new FailedLoginException("Account Locked, to many failed attempts");
  | 		}
  | 		super.loginOk = true;
  | 		this.incrementLoginCount(user);
  | 		LOG.info("User succesfully logged in");
  | 		return true;
  | 	}
  | 
  | 	/**
  | 	 * Subclass to use the PortalPrincipal to make the username easier to retrieve by the portal.
  | 	 * @param username String
  | 	 * @return {@link UserPrincipal}
  | 	 * @throws Exception e
  | 	 * @see org.jboss.security.auth.spi.AbstractServerLoginModule#createIdentity(java.lang.String)
  | 	 */
  | 	@Override
  | 	protected UserPrincipal createIdentity(final String username) throws Exception {
  | 		HMIDataBaseLoginModule.LOG.debug("LoginModule.createIdentity(" + username + ")");
  | 		return new UserPrincipal(username);
  | 	}
  | 
  | 	/**
  | 	 * @return Group[]
  | 	 * @throws LoginException le
  | 	 * @see org.jboss.security.auth.spi.DatabaseServerLoginModule#getRoleSets()
  | 	 */
  | 	@Override
  | 	protected Group[] getRoleSets() throws LoginException {
  | 		HMIDataBaseLoginModule.LOG.debug("LoginModule.getRoleSets");
  | 		return DatabaseLoginDAO.getDAO(this.dsJndiName).getRoleSets(this.getUsername());
  | 	}
  | 
  | 	/**
  | 	 * this method must be maintained do to super implementation
  | 	 * @return String the users password
  | 	 * @throws LoginException le
  | 	 * @see org.jboss.security.auth.spi.DatabaseServerLoginModule#getUsersPassword()
  | 	 */
  | 	@Override
  | 	protected String getUsersPassword() throws LoginException {
  | 		HMIDataBaseLoginModule.LOG.debug("LoginModule.getUsersPassword");
  | 		return DatabaseLoginDAO.getDAO(this.dsJndiName).getUsersPassword(this.getUsername());
  | 	}
  | 
  | 	/**
  | 	 * @param inputPassword String
  | 	 * @param expectedPassword String
  | 	 * @return boolean
  | 	 * @see org.jboss.security.auth.spi.UsernamePasswordLoginModule#validatePassword(java.lang.String, java.lang.String)
  | 	 */
  | 	@Override
  | 	protected boolean validatePassword(final String inputPassword, final String expectedPassword) {
  | 		return super.validatePassword(PasswordEncrypter.encrypt(inputPassword), expectedPassword);
  | 	}
  | 
  | 	private int getCounter(final User user) {
  | 		return user.getLoginAttempts();
  | 	}
  | 
  | 	private User incrementCounter(final User user) {
  | 		HMIDataBaseLoginModule.LOG.debug("LoginModule.incrementCounter");
  | 		try {
  | 			return DatabaseLoginDAO.getDAO(this.dsJndiName).incrementLoginAttempts(user);
  | 		} catch (final SQLException e) {
  | 			HMIDataBaseLoginModule.LOG.error("Query failed" + e.getMessage());
  | 		}
  | 		// don't ask why
  | 		return user;
  | 	}
  | 
  | 	private void incrementLoginCount(final User user) {
  | 		HMIDataBaseLoginModule.LOG.debug("LoginModule.incrementLoginCount");
  | 		DatabaseLoginDAO.getDAO(this.dsJndiName).incrementLoginCount(user);
  | 	}
  | 
  | }
  | 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4096762#4096762

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4096762



More information about the jboss-user mailing list