Tag: jndi

JSP / Servlet设计问题 – 通过JNDI全局提供请求/响应

在PHP中,总是能够从代码的任何部分访问当前请求或响应。 这个概念是PHP编程的基础。 请求数据,响应数据,会话数据(等)始终存在 ! 这在Java Servlets中不会发生! 为了能够访问代码中的HttpServletRequest,HttpServletResponse,HttpSession(等),您需要将它们作为函数变量传递。 这意味着您无法对本质上“知道”所有这些内容的Web框架进行编码,并消除了传递它们的复杂性。 所以,我设计了这个解决方案: 创建anf注册ServletRequestListener。 requestInitialized事件将当前的HttpServletRequest绑定到JNI上下文,给出当前Thread的名称(Thread.currentThread()。getName()); 在requestDestroyed事件解除绑定上面的JNI资源以进行清理。 这样,可以从代码的任何位置访问当前请求/响应,因为它们始终存在于JNI上下文中,并且可以通过提供当前线程的名称来检索。 所有已知的servlet容器都为每个请求实现单线程模型 ,因此请求无法混淆(当然,不能忘记清理它们)。 此外,每个Web应用程序的JNI资源在默认情况下是分开的 ,因此不存在混淆它们的问题或者可能由访问其他Web请求的Web应用程序引起的安全问题。 有点扭曲,但又好又简单…… 你怎么看?

Maven Jetty插件中的Jetty JNDI错误

我正在尝试配置可以从Maven Jetty插件的调用中使用的JNDI数据源。 我试图在WAR文件外部执行此操作,以便稍后可能使用Jetty部署我们的webapp的任何人都不必编辑WAR的WEB-INF目录中的配置文件。 我创建了一个jetty.xml文件,如下所示: jdbc/myDataSource ……. 然后我在Maven插件中引用了这个文件,如下所示: org.mortbay.jetty maven-jetty-plugin config/jetty.xml 但是,当我尝试通过mvn jetty运行webapp时:run-war我收到以下错误: Embedded error: Object is not of type class org.mortbay.jetty.webapp.WebAppContext 如果我省略顶级元素并尝试直接通过以下方式创建新的JNDI资源: 然后我得到一个类似的错误: Embedded error: Object is not of type class org.mortbay.jetty.plus.naming.Resource 是什么赋予了?

LDAP:错误代码49 – 简单绑定失败:NT_STATUS_LOGON_FAILURE

我试图validation用户,但它抛出Exception可能是配置有问题。 public class LdapApplication { private static final String INITIAL_CONTEXT_FACTORY = “com.sun.jndi.ldap.LdapCtxFactory”; private static final String SECURITY_AUTHENTICATION =”simple”; private static final String NAMED_CONTEXT = “CN=Users”; private static final String SAM_ACCOUNT_NAME = “sAMAccountName=”; public static void main(String[] args) { Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY,INITIAL_CONTEXT_FACTORY); env.put(Context.PROVIDER_URL, “ldap://ip:portNo/dc=organisation,dc=in”); env.put(Context.SECURITY_AUTHENTICATION, SECURITY_AUTHENTICATION); env.put(Context.SECURITY_PRINCIPAL, “cn=userName,cn=Users”); env.put(Context.SECURITY_CREDENTIALS, “password” ); DirContext context […]

以编程方式将数据源添加到嵌入式tomcat 7中的JNDI上下文

我正在尝试在服务器启动之前注册一个新的数据源,但是我正在查找执行的查找 javax.naming.NameNotFoundException:名称[jdbc / db]未绑定在此Context中。 无法找到[jdbc]。 这是我启动tomcat的方式: Tomcat tomcat = new Tomcat(); //… ContextResource resource = new ContextResource(); resource.setName(“jdbc/db”); resource.setAuth(“Container”); resource.setType(“javax.sql.DataSource”); resource.setScope(“Sharable”); resource.setProperty(“driverClassName”, “org.hsqldb.jdbc.JDBCDriver”); resource.setProperty(“url”, “jdbc:hsqldb:hsql://localhost:1234/mydb1”); tomcat.getServer().getGlobalNamingResources().addResource(resource); tomcat.start(); tomcat.getServer().await(); 查找: Connection conn = null; try { Context initContext = new InitialContext(); Context envContext = (Context) initContext.lookup(“java:/comp/env”); DataSource ds = (DataSource) envContext.lookup(“jdbc/db”); conn = ds.getConnection(); conn.createStatement()…. } […]

如何在远程WebSphere的JNDI查找期间解决sun / io / MalformedInputException

我使用WebSphere 8.5来托管我的应用程序并在应用程序服务器上配置了一些JDBC资源。 我还使用瘦客户端运行时库开发了一个客户端应用程序。 以下列方式执行JNDI查找时: env.put(Context.INITIAL_CONTEXT_FACTORY, “com.ibm.websphere.naming.WsnInitialContextFactory”); env.put(Context.PROVIDER_URL, “corbaloc:iiop:serv:2809”); Context initialContext = new InitialContext(env); DataSource ds = (DataSource) initialContext.lookup(“cell/node/servers/server/MYDB”); 引发以下exception: java.lang.NoClassDefFoundError: sun/io/MalformedInputException at com.ibm.rmi.iiop.CDRReader.getTcsCConverter(CDRReader.java:451) at com.ibm.rmi.iiop.CDRReader.readStringOrIndirection(CDRReader.java:532) at com.ibm.rmi.iiop.CDRReader.read_string(CDRReader.java:518) at com.ibm.rmi.IOR.read(IOR.java:337) at com.ibm.rmi.iiop.Connection._locate(Connection.java:531) at com.ibm.rmi.iiop.Connection.locate(Connection.java:490) at com.ibm.rmi.iiop.GIOPImpl.locate(GIOPImpl.java:229) at com.ibm.rmi.corba.Corbaloc.locateUsingINS(Corbaloc.java:307) at com.ibm.rmi.corba.Corbaloc.resolve(Corbaloc.java:378) at com.ibm.rmi.corba.ORB.objectURLToObject(ORB.java:3796) at com.ibm.CORBA.iiop.ORB.objectURLToObject(ORB.java:3263) at com.ibm.rmi.corba.ORB.string_to_object(ORB.java:3694) at com.ibm.ws.naming.util.WsnInitCtxFactory.stringToObject(WsnInitCtxFactory.java:1645) at com.ibm.ws.naming.util.WsnInitCtxFactory.getWsnNameService(WsnInitCtxFactory.java:1502) at com.ibm.ws.naming.util.WsnInitCtxFactory.getRootContextFromServer(WsnInitCtxFactory.java:1040) at com.ibm.ws.naming.util.WsnInitCtxFactory.getRootJndiContext(WsnInitCtxFactory.java:962) at com.ibm.ws.naming.util.WsnInitCtxFactory.getInitialContextInternal(WsnInitCtxFactory.java:614) […]

使用JNDI进行数据库连接

这可能听起来像一个菜鸟问题,但这是我第一次踏入数据库领域。 从这里我得到了信息 在服务器和数据库之间实现通信的最有效方法是设置数据库连接池。 为每个客户端请求创建新连接可能非常耗时,尤其是对于持续接收大量请求的应用程序。 本教程使用JNDI数据源。 我的应用程序也类似(但我不会使用Tomcat,只是套接字),我的服务器将收到来自多个客户端的请求,但我不明白为什么我应该使用JNDI数据源,为什么服务器不能维护一个打开与数据库的连接,当客户端请求到达时,它将处理请求并将数据提供给客户端。 在最坏的情况下,如果我需要一个JNDI,我怎么能用我的服务器应用程序实现它?

JNDI查询返回到LDAP服务器的名称中的正斜杠

我需要对LDAP目录服务器进行多次查询,并且我正在使用JNDI目录工具。 然后我需要使用它们的专有名称对查询结果中的对象进行一些处理。 服务器返回的一些条目包含正斜杠字符,因此JNDI使用双引号转义整个名称: NamingEnumeration results = dirContext.search(queryRoot, queryFilter, controls); for (SearchResult result : Collections.list(results)) { String objectName = result.getName(); System.out.println(objectName); } 如果查询结果中的某个对象有一个名称,比如’b = id / 10,a = 1’,则会打印出这样的名称 “b=id/10,a=1” 请注意名称周围的双引号。 由于这些引号,我无法直接从它创建javax.naming.ldap.LdapName :它失败并出现NamingException “Invalid name”。 我知道我可以手动删除这些引号,但这感觉很糟糕。 有没有办法避免这种逃避? 或者也许有更清洁的方法来做我需要的东西? PS有趣的是官方JNDI教程建议使用LdapName实现“简单名称操作”,甚至提到逃避问题,但没有提供上述问题的任何链接。

java LoginContext.login()如何工作?

我有这个代码来创建一个java客户端的配置来连接到JBoss应用程序服务器: System.setProperty( “java.security.auth.login.config”, “auth.conf” ); LoginContext auth = new LoginContext( “myAuth”, new LoginCallbackHandler( username, password ) ); auth.login(); auth.conf文件包含以下行: myAuth { org.jboss.security.ClientLoginModule required; }; 现在,代码中的其他地方(LoginContext auth在那里不知道)我有一个EJB,它执行initialContext.lookup( jndiName )和一个narrow()来访问JBoss应用程序服务器上的Bean。 如果第一步的登录信息正确,则此narrow仅成功。 题 登录信息如何从LoginContext传播到narrow() ? 我认为这两个地方之间没有任何联系。 而且,我怎么能在一个客户端内进行两个或更多不同的登录?

获取LDAP对象的内部属性

我试图获取LDAP用户内部属性,但无法找到如何获取它们 DirContext ctx = this.getDirContext(); List list = new ArrayList(); NamingEnumeration results = null; try { SearchControls controls = new SearchControls(); controls.setSearchScope(SearchControls.SUBTREE_SCOPE); results = ctx.search(“”, “(objectclass=person)”, controls); while (results.hasMore()) { SearchResult searchResult = results.next(); Attributes attributes = searchResult.getAttributes(); String fullName = this.getValue(attributes.get(“cn”)); //so on… } // so on 从LDAP,我也想获取每个员工/个人的内部属性。 默认情况下,它不返回内部属性[ex:createTimestamp]

Tomcat中JNDI的Java Mail API配置文档

我花了几天的时间来弄清楚如何通过JNDI在Tomcat中配置javax.mail.Session并进行身份validation ,现在我得到了它,但只是在深入研究代码之后。 在这段时间里,我看到了有史以来最糟糕的代码:javax.mail.Service #connect(String,String,String,String)Version 1.4.1 if (user == null) { user = url.getUsername(); if (password == null) // get password too if we need it password = url.getPassword(); } else { if (password == null && user.equals(url.getUsername())) // only get the password if it matches the username password = url.getPassword(); } 密码何时分配? 为什么两次检查null? – 然后意识到其他不属于if […]