我正在使用tomcat 8.0。 我在context.xml文件中配置了一个领域元素,它指定我将实现DataSourceRealm。 此外,根据tomcat 8域配置指令(https://tomcat.apache.org/tomcat-8.0-doc/realm-howto.html) 我在realm元素中嵌套了一个CredentialHandler元素,以指定盐长度和迭代等属性。 context.xml文件的相关部分如下:从servlet获取DataSourceRealm的实例
<Realm className="org.apache.catalina.realm.DataSourceRealm" debug="99"
dataSourceName="jdbc/board" localDataSource="true"
userTable="test_user" userNameCol="Email" userCredCol="HashedPassword"
userRoleTable="test_user_role" roleNameCol="Role">
<CredentialHandler className="MessageDigestCredentialHandler" algorithm="SHA-1"
iterations="1000" saltLength="48"/>
</Realm>
当我在我的web应用程序中调用一个servlet,我想能够引用上述境界对象,以便我可以调用非RealmBase类的静态方法(例如:digest()(不是静态的Digest()方法))。 我想调用初始化领域对象的摘要方法,因为这是包含我指定的所有属性(盐长度等)的对象。 如何从servlet访问DataSourceRealm对象? (调用静态方法并手动指定散列算法似乎不合逻辑,更不用说在静态方法中没有用于输入盐细节的参数)。
我尝试搜索ServletContext和HttpServletRequest API的方法来检索RealmBase对象或其容器对象,但没有找到任何相关的。
编辑:我尝试获取InitialContext对象,并使用lookup
方法,因为这是我用它来获取资源元素也位于context.xml文件:
InitialContext ic = new InitialContext();
DataSourceRealm realm = (DataSourceRealm) ic.lookup("org.apache.catalina.realm.DataSourceRealm");
但是,这也没有工作。
谢谢
我问过类似的问题在http://stackoverflow.com/questions/30490893/how-can-i-utilize-the-same-credential-handler-configuration-for-my-applications – brantgurga
如果您*实际*想要的是获取'CredentialHandler'实例,请参阅http://stackoverflow.com/a/41903791/7480998 –