Diky moc,
konecne muzu napsat: FUNGUJE MI TO :)
Sice to trvalo 6 dni, ale snad mam spravny zpusob.
Jen sepisi co a jak:
1. Zkousel jsem vytvorit vlastni login module a pripojovat se pomoci
"LoginContext", zde bohuzel bez uspechu
Nejprve jsem zkousel implementovat LoginModule a pak extendovat tridu
"AppservPasswordLoginModule" (pro glassfish), ani jedno nefunguje.
2. Pak jsem zkousel pouziti "JDBCRealm", ale take bez uspechu. Toto
funguje asi jen na serveru (pro web aplikace)
3. No a konecne (na vasi radu) jsem pouzil "JdbcAuthModule.jar
<http://jroller.com/resources/b/brviking/JdbcAuthModule.jar>" nastavil
podle navodu.
Pote jsem vytvoril DB, kde mam uzivatele a uzivatele_role (zde je trosku
problem, protoze v tabulce s rolemi, musi byt sloupec "role" jako prvni).
Navic jsem zde nenasel moznost kodovaneho hesla (md5, sha-1) jako v
pripade JDBCRealm, ale to uz me tolik netrapi, protoze na server poslu
heslo uz kodovane.
Pote konfigurace:
U enterprise projektu v application.xml:
<security-role>
<role-name>alesak</role-name>
</security-role>
<security-role>
<role-name>admin</role-name>
</security-role>
Dale jsem vytvoril testovaci beanu:
@Stateless
@RolesAllowed({"alesak", "admin"})
@DeclareRoles({"alesak", "admin"})
public class TestBean implements TestRemote {
public String getPozdrav() {
try {
System.out.println((ctx.isCallerInRole("alesak") ? "ANO" :
"NE"));
System.out.println((ctx.isCallerInRole("admin") ? "ANO" :
"NE"));
} catch (Exception e) {
System.err.println(e.getMessage());
}
return ctx.getCallerPrincipal().getName();
}
}
No a nyni klient:
System.setProperty("java.naming.factory.initial",
"com.sun.enterprise.naming.SerialInitContextFactory");
System.setProperty("java.naming.factory.url.pkgs",
"com.sun.enterprise.naming");
System.setProperty("java.naming.factory.state",
"com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
System.setProperty("org.omg.CORBA.ORBInitialHost",
"127.0.0.1");
System.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
System.setProperty("java.security.auth.login.config",
Main.class.getResource("/irminsul/login.conf").toString());
ProgrammaticLogin login = new ProgrammaticLogin();
login.login("ales", HashUtil.SHA1AsString("heslo"));
Context c = new InitialContext();
TestRemote tr = (TestRemote) c.lookup("TestRemote");
System.out.println(tr.getPozdrav());
login.logout(true);
Vysledkem je vypis do konsole na serveru: ANO, NE
Na klientovi: "ales", coz je vraceno z EJB Beany "return String"
Ted uz se s tim tak nejak poperu. Jedna vec me ale zarazila, ze
neexistuje nejaka prima implementace jiz od dodavatele AS ci jako
standard J2EE.
Jeste jedna drobna vec: V cele tehle "aplikaci" se nikde nehraje na
"GROUP", coz by se melo mapovat pres ejb.xml.
Jde mi o to, jestli nebudu miti problemy, kdyz pozdeji budu na
ejb-projekt stavet i webovou aplikaci.
Nevim jestli je to umysl, nebo nedostatecne rozsireni:
"org.nbcommunity.glassfish.jdbcAuthModule.JdbcLoginModule"
Jeste jednou diky vsem za pomoc.
________ Information from NOD32 ________
This message was checked by NOD32 Antivirus System for Linux Mail Servers.
http://www.eset.com