2010-03-18 6 views
1

사용자를 인증하기 위해 자신의 영역을 작성하려고합니다. org.apache.catalina.realm.RealmBase를 확장하여 .jar 파일로 컴파일하고/lib 라이브러리에 저장하는 클래스를 작성했습니다.Tomcat 6 사용자 정의 영역

<Realm className="wstest.tomcat.security.MyRealm" 
      resourceName="myrealm"/> 
내가 Tomcat을 시작하면 Tomcat이 나의 새로운 항아리 "를 참조하십시오"하지 않는 것

이 ... 내가 얻을 :

ERROR main org.apache.commons.digester.Digester - Begin event threw exception 
java.lang.ClassNotFoundException: wstest.tomcat.security.MyRealm 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
    at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:205) 
    at org.apache.tomcat.util.digester.Rule.begin(Rule.java:153) 
    at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1356) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:179) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1343) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) 
    at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1642) 
    at org.apache.catalina.startup.Catalina.load(Catalina.java:526) 
    at org.apache.catalina.startup.Catalina.load(Catalina.java:560) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:261) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 

답변

2

/lib에 은 그럼 server.xml에 이것을 추가 폴더를 사용 했습니까? 귀하의 WebProject 또는 Tomcat의 WebProject가 있습니까? 나는 혼자 바람둥이 다.하지만 내가 아는 한 당신은 JAR을 후자에 배치해야한다.

0

webapps 전에 server.xml이로드되었습니다. 따라서 Tomcat은 응용 프로그램 JAR 파일을로드하기 전에 Realm 구현 클래스를 찾아야합니다. tomcat/lib에 JAR 파일을 놓으면 문제가 해결됩니다.

또한 Realm 생성자에 아무 것도 기록하지 말아야합니다. containerLog 필드가 설정되어 있지 않아 심한 NPE를 얻을 수 있습니다. loadInternal()은 containerLog를 설정합니다.