Aufrufen von EJBs in zwei unterschiedlichen Containern

Allgemeine Themen rund um dem Appl.-Server GlassFish

Moderator: wegus

Antworten
Fenixxus
Beiträge: 7
Registriert: 25.02.2009, 13:55

Aufrufen von EJBs in zwei unterschiedlichen Containern

Beitrag von Fenixxus » 25.02.2009, 14:13

Hi zusammen,

ich habe ein Problem, bei dem ich so langsam nicht mehr weiter weiß:

Ich habe eine @Stateless-Session-Bean AuthenticatorBean geschrieben, die eine EJB (LoginBerecht) aufruft, die sich in einem anderen EJB-Container befindet.
Ich brauche diese Bean, weil sie die Berechtigung der Login-Daten an einer zentralen Datenbank überprüft.
Man kann sich die Struktur also wie folgt vorstellen:

application-ejb:
AuthenticatorBean
common-ejb:
LoginBerecht

Nun zum Problem: Beide Beans werden fehlerfrei deployed. Meine Login-Seite kann ich auch aufrufen. Allerdings erhalte ich folgende Exception, wenn ich den Login meiner AuthenticatorBean durchführen möchte. Hier die wichtigsten Auszüge:

Code: Alles auswählen

13:43:44.761+0100|SEVERE|sun-appserver2.1|javax.enterprise.system.core.security|_ThreadID=18;_ThreadName=httpSSLWorkerThread-8080-0;_RequestID=fea99242-375f-4bf9-97ef-2b77aa83dc5d;|JACC: Unexpected exception on access decision
java.lang.NullPointerExceptionnull	at java.io.Win32FileSystem.normalize(Win32FileSystem.java:164)null	at java.io.Win32FileSystem.getUserPath(Win32FileSystem.java:296)null	at java.io.Win32FileSystem.resolve(Win32FileSystem.java:314)null	at java.io.File.getCanonicalPath(File.java:559)null	at com.sun.enterprise.security.provider.PolicyFile.canonPath(PolicyFile.java:1860)null	at com.sun.enterprise.security.provider.PolicyFile.canonicalizeCodebase(PolicyFile.java:1826)null	at (PolicyFile.java:1252)null	at java.security.AccessController.doPrivileged(Native Method)null	at com.sun.enterprise.security.provider.PolicyFile.getPermissions(PolicyFile.java:1250)null

[#|2009-02-24T13:43:44.840+0100|INFO|sun-appserver2.1|javax.enterprise.system.container.ejb|_ThreadID=18;_ThreadName=httpSSLWorkerThread-8080-0;LoginBerechtBean;|EJB5018: An exception was thrown during an ejb invocation on [LoginBerechtBean]|#]

javax.ejb.AccessLocalException: Client not authorized for this invocation.null	at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1218)null

javax.ejb.EJBException: nested exception is: java.rmi.AccessException: CORBA NO_PERMISSION 9998


Hatte vielleicht jemand bereits einen ähnlichen Fehler, oder kann mir einen Tipp geben, was ich falsch gemacht habe?
Ich würde sagen, dass ich keine Berechtigung habe, um die Bean(LoginBerecht) ausführen zu können.

Vielen Dank im Voraus.

big_fish
Beiträge: 123
Registriert: 21.07.2006, 15:37
Wohnort: Nürnberg
Kontaktdaten:

Beitrag von big_fish » 25.02.2009, 16:05

Hallo,

Um zu testen, ob es an den Security Manager liegt würde ich diesen mal auf "disabled" setzen. Wie man das macht steht unter:

http://docs.sun.com/app/docs/doc/820-4336/beabx?a=view
( Enabling and Disabling the Security Manager )

Wenn ja, dann würde ich die server.policy - Datei, die im config - Verzeichnis liegt, mir mal näher anschauen.

MfG
big_fish

Fenixxus
Beiträge: 7
Registriert: 25.02.2009, 13:55

Beitrag von Fenixxus » 25.02.2009, 16:26

Ich habe gerade in der Admin-Konsole nachgesehen. Dort ist unter "Configuration->Security" der Security Manager disabled (die Checkbox ist nicht angehakt).

Die server.policy sieht so aus:

Code: Alles auswählen

//
// The contents of this file are subject to the terms 
// of the Common Development and Distribution License 
// (the "License").  You may not use this file except 
// in compliance with the License.
// 
// You can obtain a copy of the license at 
// glassfish/bootstrap/legal/CDDLv1.0.txt or 
// https://glassfish.dev.java.net/public/CDDLv1.0.html. 
// See the License for the specific language governing 
// permissions and limitations under the License.
// 
// When distributing Covered Code, include this CDDL 
// HEADER in each file and include the License file at 
// glassfish/bootstrap/legal/CDDLv1.0.txt.  If applicable, 
// add the following below this CDDL HEADER, with the 
// fields enclosed by brackets "[]" replaced with your 
// own identifying information: Portions Copyright [yyyy] 
// [name of copyright owner]
//

/* Copyright 2004 Sun Microsystems, Inc. All rights reserved.     */
/* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */

// Core server classes get all permissions by default
grant codeBase "file:${com.sun.aas.installRoot}/lib/-" {
    permission java.security.AllPermission;
};

// jdmk classes get all permissions by default
grant codeBase "file:${com.sun.aas.jdmkHome}/lib/-" {
    permission java.security.AllPermission;
};

// mfwk_instrum_tk.jar  get all permissions by default
grant codeBase "file:${com.sun.aas.mfwkHome}/lib/mfwk_instrum_tk.jar" {
    permission java.security.AllPermission;
};

// permissions for SNMP module
grant codeBase "file:${com.sun.aas.instanceRoot}/applications/j2ee-modules/__assnmp/-" {
    permission javax.management.MBeanServerPermission "*";
    permission javax.management.MBeanPermission "*", "*";
    permission java.lang.RuntimePermission "createClassLoader";
    permission java.net.SocketPermission "*", "accept";
};

// JBI get all permissions by default
grant codeBase "file:${com.sun.aas.installRoot}/jbi/-" {
    permission java.security.AllPermission;
};

// JBI instances get all permissions by default
grant codeBase "file:${com.sun.aas.instanceRoot}/jbi/-" {
    permission java.security.AllPermission;
};

// iMQ classes get all permissions by default
grant codeBase "file:${com.sun.aas.imqLib}/-" {
    permission java.security.AllPermission;
};

// ANT classes get all permissions by default
grant codeBase "file:${com.sun.aas.antLib}/-" {
    permission java.security.AllPermission;
};

// Derby driver classes get all permissions by default
grant codeBase "file:${com.sun.aas.derbyRoot}/lib/-" {
    permission java.security.AllPermission;
}; 

// Pointbase embedded server classes get all permissions by default
grant codeBase "file:${com.sun.aas.pointbaseRoot}/lib/-" {
    permission java.security.AllPermission;
};

// Web Services classes get all permissions by default
grant codeBase "file:${com.sun.aas.webServicesLib}/-" {
    permission java.security.AllPermission;
};

// permissions for avkit classes
grant codeBase "file:${j2ee.appverification.home}/lib/-" {
    permission java.security.AllPermission;
};

// permissions for HADB jar file(s)
grant codeBase "file:${com.sun.aas.hadbRoot}/lib/-" {
    permission java.security.AllPermission;
};

// permission for JDK's tools.jar to enable webservice annotation processing
// at runtime by wsgen tool: 
//       permission java.lang.RuntimePermission "createClassLoader";
//
// permission for JDK's tools.jar to sign JARs at runtime for 
// Java Web Start support:
//       permissions java.security.AllPermission;
// on the advice of the JDK tools folks.  Should be refined later.
grant codeBase "file:${com.sun.aas.javaRoot}/lib/tools.jar" {
    permission java.security.AllPermission;
};

//Required to register MBeans, fails otherwise
grant {
    permission javax.management.MBeanTrustPermission "register" ;
};
//Required to register MBeans, fails otherwise


// Basic set of required permissions granted to all remaining code
grant {
    //Workaround for bugs #6484935, 6513799
    permission java.lang.RuntimePermission "getProtectionDomain";
    permission com.sun.corba.ee.impl.presentation.rmi.DynamicAccessPermission "access";
    permission java.util.PropertyPermission "*", "read,write";

    permission java.lang.RuntimePermission  "loadLibrary.*";
    permission java.lang.RuntimePermission  "queuePrintJob";
    permission java.net.SocketPermission    "*", "connect";
    permission java.io.FilePermission       "<<ALL FILES>>", "read,write";

        // work-around for pointbase bug 4864405      
        permission java.io.FilePermission "${com.sun.aas.instanceRoot}${/}lib${/}databases${/}-", "delete";
        permission java.io.FilePermission "${java.io.tmpdir}${/}-", "delete";

    permission java.util.PropertyPermission "*", "read";

    permission java.lang.RuntimePermission    "modifyThreadGroup";
    permission java.lang.RuntimePermission    "getClassLoader";
    permission java.lang.RuntimePermission    "setContextClassLoader";
        permission javax.management.MBeanPermission "[com.sun.messaging.jms.*:*]", "*"; 
};


// Following grant block is only required by Connectors. If Connectors
// are not in use the recommendation is to remove this grant.
grant {
        permission javax.security.auth.PrivateCredentialPermission "javax.resource.spi.security.PasswordCredential * \"*\"","read";
};

// Following grant block is only required for Reflection. If Reflection
// is not in use the recommendation is to remove this section.
grant {
    permission java.lang.RuntimePermission "accessDeclaredMembers";
};

// Permissions to invoke CORBA objects in server
grant {
    permission com.sun.enterprise.security.CORBAObjectPermission "*", "*";
};
Nun frage ich mich, was ich daran ändern muss.
Ich kann mir nur vorstellen, dass eventuell folgende Stellen in Frage kommen:

Code: Alles auswählen

//Required to register MBeans, fails otherwise
grant {
    permission javax.management.MBeanTrustPermission "register" ;
};
//Required to register MBeans, fails otherwise

// Permissions to invoke CORBA objects in server
grant {
    permission com.sun.enterprise.security.CORBAObjectPermission "*", "*";
};
Sind das die richtigen Stellen? Wenn ja: Es wäre sehr nett von dir, wenn du mir sagen kannst, was ich dort konkret ändern muss.
Dafür wäre ich dir sehr dankbar.
Andere Stellen kann ich mir kaum vorstellen.

Gruß
Fenixxus

Fenixxus
Beiträge: 7
Registriert: 25.02.2009, 13:55

Beitrag von Fenixxus » 25.02.2009, 16:34

Eine Frage:
Ich habe mir bereits folgenden Link angesehen:
http://wiki.glassfish.java.net/Wiki.jsp ... tyProblems Dort ist als "Troubleshooting" angegeben, dass für javax.ejb.AccessLocalException: Client Not Authorized Error die "sun-application.xml" und nicht die "server.policy" geändert werden muss.

Übersehe ich da was?
Hat wer eine Idee was ich dort verändern muss?

Gruß
Fenixxus

Fenixxus
Beiträge: 7
Registriert: 25.02.2009, 13:55

Beitrag von Fenixxus » 02.03.2009, 12:46

Hi zusammen,

ich habe bisher die server.policy wie folgt manipuliert:

Code: Alles auswählen

//Alles erlauben
grant {
  permission java.security.AllPermission;
};
Den Rest der Policy habe ich auskommentiert. Leider erhalte ich diesselbe Fehlermeldung. Habe ich da was übersehen, oder fehlt da noch was?

Gruß

Antworten