[jboss-cvs] jboss-seam/examples/seamspace/src/org/jboss/seam/example/seamspace ...
Shane Bryzak
Shane_Bryzak at symantec.com
Tue Jan 2 02:44:26 EST 2007
User: sbryzak2
Date: 07/01/02 02:44:26
Modified: examples/seamspace/src/org/jboss/seam/example/seamspace
AuthenticatorAction.java LoginAction.java
Log:
updated with authentication changes
Revision Changes Path
1.4 +51 -33 jboss-seam/examples/seamspace/src/org/jboss/seam/example/seamspace/AuthenticatorAction.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: AuthenticatorAction.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/seamspace/src/org/jboss/seam/example/seamspace/AuthenticatorAction.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- AuthenticatorAction.java 31 Dec 2006 01:26:42 -0000 1.3
+++ AuthenticatorAction.java 2 Jan 2007 07:44:26 -0000 1.4
@@ -1,67 +1,81 @@
package org.jboss.seam.example.seamspace;
import java.util.Map;
+import java.util.Set;
+import javax.naming.InitialContext;
import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
+import org.jboss.seam.Seam;
+import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.security.AuthenticationException;
+import org.jboss.seam.security.Identity;
import org.jboss.seam.security.Role;
+import org.jboss.seam.security.UsernamePasswordToken;
/**
* Authenticates the member against the database
*
* @author Shane Bryzak
*/
- at Name("authenticatorAction")
public class AuthenticatorAction implements LoginModule
{
private Subject subject;
- @In(create=true)
- private EntityManager entityManager;
+ private UsernamePasswordToken token;
public boolean abort() throws LoginException
{
- // TODO Auto-generated method stub
- return false;
+ return true;
}
public boolean commit() throws LoginException
{
- // TODO Auto-generated method stub
- return false;
+ Contexts.getSessionContext().set(Seam.getComponentName(Identity.class),
+ new UsernamePasswordToken(token.getName(), token.getCredentials(),
+ token.getRoles()));
+ return true;
}
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map<String, ?> sharedState, Map<String, ?> options)
{
this.subject = subject;
+
+ Set<UsernamePasswordToken> principals = subject.getPrincipals(UsernamePasswordToken.class);
+
+ if (principals.isEmpty())
+ throw new AuthenticationException("No principal found in subject");
+
+ token = principals.iterator().next();
}
public boolean login() throws LoginException
{
+ EntityManager entityManager = null;
try
{
- Member member = (Member) entityManager.createQuery(
+ InitialContext ctx = new InitialContext();
+ EntityManagerFactory f = (EntityManagerFactory) ctx.lookup(
+ "java:/seamspaceEntityManagerFactory");
+ entityManager = f.createEntityManager();
+
+ Member member = (Member) entityManager
+ .createQuery(
"from Member where username = :username and password = :password")
-// .setParameter("username", auth.getPrincipal().toString())
-// .setParameter("password", auth.getCredentials())
+ .setParameter("username", token.getPrincipal().toString())
+ .setParameter("password", token.getCredentials())
.getSingleResult();
- Role[] roles = new Role[member.getRoles().size()];
- int idx = 0;
for (MemberRole mr : member.getRoles())
- roles[idx++] = new Role(mr.getName());
+ subject.getPrincipals().add(new Role(mr.getName()));
-// return new UsernamePasswordToken(authentication.getPrincipal(),
-// authentication.getCredentials(), roles);
return true;
}
catch (NoResultException ex)
@@ -72,11 +86,15 @@
{
throw new AuthenticationException("Unknown authentication error", ex);
}
+ finally
+ {
+ if (entityManager != null)
+ entityManager.close();
+ }
}
public boolean logout() throws LoginException
{
- // TODO Auto-generated method stub
- return false;
+ return true;
}
}
1.6 +10 -6 jboss-seam/examples/seamspace/src/org/jboss/seam/example/seamspace/LoginAction.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: LoginAction.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/seamspace/src/org/jboss/seam/example/seamspace/LoginAction.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- LoginAction.java 22 Dec 2006 02:04:48 -0000 1.5
+++ LoginAction.java 2 Jan 2007 07:44:26 -0000 1.6
@@ -2,6 +2,8 @@
import javax.ejb.Remove;
import javax.ejb.Stateful;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
import org.jboss.seam.ScopeType;
import org.jboss.seam.Seam;
@@ -12,8 +14,8 @@
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Synchronized;
import org.jboss.seam.core.FacesMessages;
-import org.jboss.seam.security.AuthenticationException;
-import org.jboss.seam.security.authenticator.Authenticator;
+import org.jboss.seam.security.SeamSecurityManager;
+import org.jboss.seam.security.UsernamePasswordToken;
/**
* Login action
@@ -36,11 +38,14 @@
{
try
{
- Authenticator.instance().authenticate(member.getUsername(),
- member.getPassword());
+ LoginContext lc = SeamSecurityManager.instance().createLoginContext();
+ lc.getSubject().getPrincipals().add(new UsernamePasswordToken(
+ member.getUsername(), member.getPassword()));
+ lc.login();
+
loggedIn = true;
}
- catch (AuthenticationException ex)
+ catch (LoginException ex)
{
FacesMessages.instance().add("Invalid login");
}
@@ -49,7 +54,6 @@
public void logout()
{
loggedIn = false;
- Authenticator.instance().unauthenticateSession();
Seam.invalidateSession();
}
More information about the jboss-cvs-commits
mailing list