我在JSF Webapp中使用“自制”领域。
<Context docBase="senateurs" jndiExceptionOnFailedWrite="false" path="/senateurs" reloadable="true">
<Resource auth="Container" description="Extraction des roles" maxActive="3" maxIdle="1" maxWait="60" name="jdbc/authSen" type="javax.sql.DataSource" validationQuery="select * from senateurs.qua"/>
<Realm className="org.apache.catalina.realm.SenatLdapDataSourceRealm" dataSourceName="jdbc/authSen" instanceName="realm-senateurs" localDataSource="true" roleNameCol="rolcod" userNameCol="perlogldap" userRoleTable="senateurs.perrol"/>
</Context>
在以下问题中,可能是任何领域。
我想访问此领域,以在我的JSF Webapp中公开其配置属性。
要访问数据源,我可以使用以下函数:
public static BasicDataSource getDataSource(String dataSourceName) throws NamingException {
InitialContext ic = new InitialContext();
ic.createSubcontext("java:");
ic.createSubcontext("java:comp");
ic.createSubcontext("java:comp/env");
String subContext = "java:comp/env";
String[] split = dataSourceName.split("/");
for(int i = 0 ; i < split.length -1 ; i++) {
subContext += "/" + split[i];
ic.createSubcontext(subContext);
}
return (BasicDataSource) ic.lookup("java:comp/env/" + dataSourceName);
}
要访问主机配置中声明的领域,我可以使用:
public static Realm getTomcatRealm() {
try {
MBeanServer mBeanServer = MBeanServerFactory.findMBeanServer(null).get(0);
ObjectName name = new ObjectName("Catalina", "type", "Server");
Server server = (Server) mBeanServer.getAttribute(name, "managedResource");
Service service = server.findService("Catalina");
Engine engine = (Engine) service.getContainer();
Host host = (Host) engine.findChild(engine.getDefaultHost());
return host.getRealm();
} catch (MBeanException ex) {
log.error("Erreur lors de l'accès a serveur Tomcat",ex);
} catch (AttributeNotFoundException ex) {
log.error("Erreur lors de l'accès a serveur Tomcat",ex);
} catch (InstanceNotFoundException ex) {
log.error("Erreur lors de l'accès a serveur Tomcat",ex);
} catch (ReflectionException ex) {
log.error("Erreur lors de l'accès a serveur Tomcat",ex);
} catch (MalformedObjectNameException ex) {
log.error("Erreur lors de l'accès a serveur Tomcat",ex);
} finally {
return null;
}
}
我应该使用什么来访问在webapp上下文中声明的领域?
提前致谢。
最佳答案
您可以在实例上添加一个已有代码的小扩展名。
Context context = (Context) host.findChild("/senateurs");
return context.getRealm();
关于java - 使用Tomcat 7访问特定于上下文的领域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19313883/