Author: djencks
Date: Mon Jul 9 12:52:24 2007
New Revision: 554748
URL: http://svn.apache.org/viewvc?view=rev&rev=554748
Log:
OPENEJB-605 allow more info (login realm name) in authentication request
Added:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RealmPrincipalInfo.java
(with props)
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ri/sp/PseudoSecurityService.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/spi/SecurityService.java
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
openejb/trunk/openejb3/server/openejb-client/src/test/java/org/apache/openejb/client/ClientLoginTest.java
openejb/trunk/openejb3/server/openejb-client/src/test/java/org/apache/openejb/client/ClientSecurityTest.java
openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/AuthRequestHandler.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java?view=diff&rev=554748&r1=554747&r2=554748
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java
Mon Jul 9 12:52:24 2007
@@ -92,7 +92,11 @@
}
public Object login(String username, String password) throws
LoginException {
- LoginContext context = new LoginContext("PropertiesLogin", new
UsernamePasswordCallbackHandler(username, password));
+ return login("PropertiesLogin", username, password);
+ }
+
+ public Object login(String securityRealm, String username, String
password) throws LoginException {
+ LoginContext context = new LoginContext(securityRealm, new
UsernamePasswordCallbackHandler(username, password));
context.login();
Subject subject = context.getSubject();
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ri/sp/PseudoSecurityService.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ri/sp/PseudoSecurityService.java?view=diff&rev=554748&r1=554747&r2=554748
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ri/sp/PseudoSecurityService.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ri/sp/PseudoSecurityService.java
Mon Jul 9 12:52:24 2007
@@ -70,6 +70,10 @@
return null;
}
+ public Object login(String securityRealm, String user, String pass) throws
LoginException {
+ return null;
+ }
+
public void associate(Object securityIdentity) throws LoginException {
}
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/spi/SecurityService.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/spi/SecurityService.java?view=diff&rev=554748&r1=554747&r2=554748
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/spi/SecurityService.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/spi/SecurityService.java
Mon Jul 9 12:52:24 2007
@@ -47,6 +47,7 @@
* Active
*/
public Object login(String user, String pass) throws LoginException;
+ public Object login(String securityRealm, String user, String pass) throws
LoginException;
/**
* Active
Modified:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java?view=diff&rev=554748&r1=554747&r2=554748
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java
Mon Jul 9 12:52:24 2007
@@ -121,8 +121,12 @@
* @throws FailedLoginException if the username password combination is
not valid
*/
public static Object directAuthentication(String username, String
password, ServerMetaData server) throws FailedLoginException {
+ return directAuthentication("PropertiesLogin", username, password,
server);
+ }
+
+ public static Object directAuthentication(String securityRealm, String
username, String password, ServerMetaData server) throws FailedLoginException {
// authenticate
- AuthenticationRequest authReq = new AuthenticationRequest(username,
password);
+ AuthenticationRequest authReq = new AuthenticationRequest(new
RealmPrincipalInfo(securityRealm, username), password);
AuthenticationResponse authRes;
try {
authRes = (AuthenticationResponse) Client.request(authReq, new
AuthenticationResponse(), server);
@@ -132,7 +136,7 @@
// check the response
if (authRes.getResponseCode() != ResponseCodes.AUTH_GRANTED) {
- throw new FailedLoginException("This principle is not
authorized.");
+ throw new FailedLoginException("This principal is not
authenticated.");
}
// return the response object
Modified:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java?view=diff&rev=554748&r1=554747&r2=554748
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
Mon Jul 9 12:52:24 2007
@@ -127,7 +127,8 @@
public void authenticate(String userID, String psswrd) throws
AuthenticationException {
- AuthenticationRequest req = new AuthenticationRequest(userID, psswrd);
+ String securityRealm = "PropertiesLogin";
+ AuthenticationRequest req = new AuthenticationRequest(new
RealmPrincipalInfo(securityRealm, userID), psswrd);
AuthenticationResponse res = null;
try {
Added:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RealmPrincipalInfo.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RealmPrincipalInfo.java?view=auto&rev=554748
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RealmPrincipalInfo.java
(added)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RealmPrincipalInfo.java
Mon Jul 9 12:52:24 2007
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.openejb.client;
+
+import java.io.Externalizable;
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+public class RealmPrincipalInfo implements Externalizable {
+ private String securityRealm;
+ private String principalName;
+ private static final byte VERSION = 1;
+
+
+ public RealmPrincipalInfo() {
+ }
+
+ public RealmPrincipalInfo(String securityRealm, String principalName) {
+ this.securityRealm = securityRealm;
+ this.principalName = principalName;
+ }
+
+
+ public String getSecurityRealm() {
+ return securityRealm;
+ }
+
+ public String getPrincipalName() {
+ return principalName;
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeByte(VERSION);
+ out.writeObject(securityRealm);
+ out.writeObject(principalName);
+ }
+
+ public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
+ byte version = in.readByte();
+ if (version == VERSION) {
+ securityRealm = (String) in.readObject();
+ principalName = (String) in.readObject();
+ } else {
+ throw new IOException("Unknown version of RealmPrincipalInfo: " +
version + ", accepted values are: " + VERSION);
+ }
+ }
+}
Propchange:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RealmPrincipalInfo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RealmPrincipalInfo.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/RealmPrincipalInfo.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
openejb/trunk/openejb3/server/openejb-client/src/test/java/org/apache/openejb/client/ClientLoginTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/test/java/org/apache/openejb/client/ClientLoginTest.java?view=diff&rev=554748&r1=554747&r2=554748
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/test/java/org/apache/openejb/client/ClientLoginTest.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/test/java/org/apache/openejb/client/ClientLoginTest.java
Mon Jul 9 12:52:24 2007
@@ -41,7 +41,7 @@
// Verify stored server request
assertTrue("serverRequest should be an instance of
AuthenticationRequest", LoginTestUtil.serverRequest instanceof
AuthenticationRequest);
AuthenticationRequest authenticationRequest = (AuthenticationRequest)
LoginTestUtil.serverRequest;
- assertEquals("jonathan", authenticationRequest.getPrincipal());
+ assertEquals("jonathan",
((RealmPrincipalInfo)authenticationRequest.getPrincipal()).getPrincipalName());
assertEquals("secret", authenticationRequest.getCredentials());
// get the subject
Modified:
openejb/trunk/openejb3/server/openejb-client/src/test/java/org/apache/openejb/client/ClientSecurityTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/test/java/org/apache/openejb/client/ClientSecurityTest.java?view=diff&rev=554748&r1=554747&r2=554748
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/test/java/org/apache/openejb/client/ClientSecurityTest.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/test/java/org/apache/openejb/client/ClientSecurityTest.java
Mon Jul 9 12:52:24 2007
@@ -62,7 +62,7 @@
// Verify stored server request
assertTrue("serverRequest should be an instance of
AuthenticationRequest", LoginTestUtil.serverRequest instanceof
AuthenticationRequest);
AuthenticationRequest authenticationRequest = (AuthenticationRequest)
LoginTestUtil.serverRequest;
- assertEquals("jonathan", authenticationRequest.getPrincipal());
+ assertEquals("jonathan",
((RealmPrincipalInfo)authenticationRequest.getPrincipal()).getPrincipalName());
assertEquals("secret", authenticationRequest.getCredentials());
// verify client identity
@@ -97,7 +97,7 @@
// Verify stored server request
assertTrue("serverRequest should be an instance of
AuthenticationRequest", LoginTestUtil.serverRequest instanceof
AuthenticationRequest);
AuthenticationRequest authenticationRequest =
(AuthenticationRequest) LoginTestUtil.serverRequest;
- assertEquals("jonathan",
authenticationRequest.getPrincipal());
+ assertEquals("jonathan",
((RealmPrincipalInfo)authenticationRequest.getPrincipal()).getPrincipalName());
assertEquals("secret",
authenticationRequest.getCredentials());
// verify client identity
Modified:
openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/AuthRequestHandler.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/AuthRequestHandler.java?view=diff&rev=554748&r1=554747&r2=554748
==============================================================================
---
openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/AuthRequestHandler.java
(original)
+++
openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/AuthRequestHandler.java
Mon Jul 9 12:52:24 2007
@@ -20,6 +20,7 @@
import org.apache.openejb.client.AuthenticationResponse;
import org.apache.openejb.client.ClientMetaData;
import org.apache.openejb.client.ResponseCodes;
+import org.apache.openejb.client.RealmPrincipalInfo;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.spi.SecurityService;
import org.apache.openejb.util.Messages;
@@ -29,6 +30,8 @@
import java.io.ObjectOutputStream;
import java.io.IOException;
+import javax.security.auth.login.LoginException;
+
class AuthRequestHandler {
Messages _messages = new
Messages("org.apache.openejb.server.util.resources");
@@ -44,12 +47,21 @@
try {
req.readExternal(in);
-
- String username = (String) req.getPrincipal();
+ String securityRealm = null;
+ String username;
+ if (req.getPrincipal() instanceof String) {
+ username = (String) req.getPrincipal();
+ } else if (req.getPrincipal() instanceof RealmPrincipalInfo) {
+ RealmPrincipalInfo info =
(RealmPrincipalInfo)req.getPrincipal();
+ securityRealm = info.getSecurityRealm();
+ username = info.getPrincipalName();
+ } else {
+ throw new LoginException("Unkown message principal object: " +
req.getPrincipal());
+ }
String password = (String) req.getCredentials();
SecurityService securityService =
SystemInstance.get().getComponent(SecurityService.class);
- Object token = securityService.login(username, password);
+ Object token = securityService.login(securityRealm, username,
password);
ClientMetaData client = new ClientMetaData();
client.setClientIdentity(token);