从重写的Tomcat类访问应用程序代码

时间:2014-07-23 14:23:37

标签: java hibernate tomcat tomcat7 libraries

我目前正在创建自己的JDBCRealm,更具体地说,我正在重写Authenticate方法。覆盖没有问题,我使用SHA身份验证使其工作。

当我需要访问Tomcat自己的方法(例如getPassword(username)getPrincipal(username))未涵盖的其他专栏时,会出现问题。

我有一个基于用户名检索用户的Hibernate方法,它看起来像:

UsersDTO user = UsersDAO.getUser(username);

问题是,因为代码是Tomcat库的一部分而不是应用程序,所以调用该方法并不起作用。它不会抛出任何异常,并且没有任何内容记录到 catalina.out ,它只是向我显示 500 HTTP错误

我尝试过很多东西,但此刻我感到很茫然。任何人都可以解释我的问题吗?

2 个答案:

答案 0 :(得分:1)

您不能从服务器类加载器加载的类中调用应用程序类加载器加载的类。

您应该以一种方式部署您的jar,所有调用都在由同一个类加载器加载的类之间完成,或者从较低级别的类加载器加载的类到由更高级别的类加载器加载的类。

看看这个。它与Weblogic有关,但相同的概念适用于Tomcat。

http://docs.oracle.com/cd/E24329_01/web.1211/e24368/classloading.htm

答案 1 :(得分:0)

Tomcat是使用Apache Commons Logging库实现的。因此,通过在代码中正确实现该日志库,tomcat应该能够正确记录您的错误。 参见参考文献here