2015-05-19 3 views
4

Я использую spnego.jar из dfelix с Glassfish 4.1 в качестве фильтра в web.xml. Я задал вопрос на форуме по проекту, но не получил ответа.spnego.jar switch from Java 7 to Java 8 cast exception

Я хочу переключиться с Java 1.7.0_45 на 1.8.0_45 (попробовал и другие версии 1.8). После включения тестовой среды я получаю ошибку, показанную ниже. Пробовал и отдельный случай с простой Java также получил исключение случая.

Я использую тот же krb5.conf (ниже), файл login.conf и keytab, как в 1.7.

Это несовместимо с Java 1.8?

[GlassFish 4.1] [СУРОВОЙ] [] [javax.enterprise.web] [TID: _ThreadID = 16 _ThreadName = RunLevelControllerThread-1431425761516] [timeMillis: 1431425776202] [levelValue: 1000] [[ WebModule [/ ах] Исключение исходный фильтр SpnegoHttpFilter
java.lang.InstantiationException на org.apache.catalina.core.ApplicationFilterConfig. (ApplicationFilterConfig.java:135)
в org.apache.catalina.core.StandardContext.filterStart (StandardContext.java : 5329)
по адресу org.apache.catalina.core.StandardContext.start (StandardContext.java:5943) at com.sun.enterprise. web.WebModule.start (WebModule.java:691)
в org.apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:1041)
в org.apache.catalina.core.ContainerBase.addChild (ContainerBase. Java: 1024)
на org.apache.catalina.core.StandardHost.addChild (StandardHost.java:747)
в com.sun.enterprise.web.WebContainer.loadWebModule (WebContainer.java:2286)
на ком .sun.enterprise.web.WebContainer.loadWebModule (WebContainer.java:1932)
на com.sun.enterprise.web.WebApplication.start (WebApplication.java:139)
в org.glassfish.internal.data.EngineRef .start (EngineRef.jav а: 122)
на org.glassfish.internal.data.ModuleInfo.start (ModuleInfo.java:291)
на org.glassfish.internal.data.ApplicationInfo.start (ApplicationInfo.java:352)
на ком .sun.enterprise.v3.server.ApplicationLifecycle.deploy (ApplicationLifecycle.java:500)
на com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication (ApplicationLoaderService.java:406)
в com.sun.enterprise .v3.server.ApplicationLoaderService.postConstruct (ApplicationLoaderService.java:243)
на org.jvnet.hk2.internal.ClazzCreator.postConstructMe (ClazzCreator.java:329)
в org.jvnet.hk2.i nternal.ClazzCreator.create (ClazzCreator.java:377)
на org.jvnet.hk2.internal.SystemDescriptor.create (SystemDescriptor.java:461)
в org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate (AsyncRunLevelContext.java:227)
на org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate (RunLevelContext.java:84)
в org.jvnet.hk2.internal.Utilities.createService (Utilities.java:2258)
на org.jvnet.hk2.internal.ServiceHandleImpl.getService (ServiceHandleImpl.java:105)
в org.jvnet.hk2.internal.ServiceHandleImpl.getService (ServiceHandleImpl.java:87)
в орг. glassfish.hk2.runlevel.internal.CurrentTaskFuture $ QueueRunner.oneJob (CurrentTaskFuture.java:1162)
в org.glassfish.hk2.runlevel.internal.CurrentTaskFuture $ QueueRunner.run (CurrentTaskFuture.java:1147)
в java.util.concurrent. ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)
в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617)
в java.lang.Thread.run (Thread.java:745)
Вызывается: javax.servlet.ServletException: javax.security.auth.login.LoginException: java.lang.IllegalArgumentException: java.lang.ClassCastException: java.util.Vector нельзя отбрасывать в java.util.Hashtable
на солнце. security.krb5.Con fig.get0 (Config.java:287)
на sun.security.krb5.Config.getString0 (Config.java:268)
в sun.security.krb5.Config.getAll (Config.java:240)
на sun.security.krb5.Config.getKDCList (Config.java:1030)
в sun.security.krb5.KdcComm.send (KdcComm.java:218)
в sun.security.krb5.KdcComm.send (KdcComm .java: 200)
на sun.security.krb5.KrbAsReqBuilder.send (KrbAsReqBuilder.java:316)
в sun.security.krb5.KrbAsReqBuilder.action (KrbAsReqBuilder.java:361)
в com.sun. security.auth.module.Krb5LoginModule.attemptAuthenti катион (Krb5LoginModule.java:776)
в com.sun.security.auth.module.Krb5LoginModule.login (Krb5LoginModule.java:617)
в sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
на солнце. reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.lang.reflect.Method.invoke (Method.java:497)
в javax.security.auth.login.LoginContext.invoke (LoginContext.java:755)
at javax.security.auth.login.LoginContext.access $ 000 (LoginContext.java:195)
в javax.security.auth.login.LoginContext $ 4.run (LoginContext.java:682)
в javax.security.auth.login.LoginContext $ 4.run (LoginContext.java:680)
в java.security .AccessController.doPrivileged (Родной метод)
в javax.security.auth.login.LoginContext.invokePriv (LoginContext.java:680)
в javax.security.auth.login.LoginContext.login (LoginContext.java:587)
на net.sourceforge.spnego.SpnegoAuthenticator. (SpnegoAuthenticator.java:161)
на net.sourceforge.spnego.SpnegoHttpFilter.init (SpnegoHttpFilter.java:196)
в орг .apache.catalina.core.ApplicationFilterConfig.getFilter (ApplicationFilterConfig.java:275)
на org.apache.catalina.core.ApplicationFilterConfig. (ApplicationFilterConfig.java:131)
на org.apache.catalina.core.StandardContext. filterStart (StandardContext.java:5329)
на org.apache.catalina.core.StandardContext.start (StandardContext.java:5943)
в com.sun.enterprise.web.WebModule.start (WebModule.java:691)
at org.apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:1041)
at org.apache.catalina.core.ContainerBase.addChild (ContainerBase.Java: 1024)
на org.apache.catalina.core.StandardHost.addChild (StandardHost.java:747)
в com.sun.enterprise.web.WebContainer.loadWebModule (WebContainer.java:2286)
на ком .sun.enterprise.web.WebContainer.loadWebModule (WebContainer.java:1932)
на com.sun.enterprise.web.WebApplication.start (WebApplication.java:139)
в org.glassfish.internal.data.EngineRef .start (EngineRef.java:122)
at org.glassfish.internal.data.ModuleInfo.start (ModuleInfo.java:291)
at org.glassfish.internal.data.ApplicationInfo.start (ApplicationInfo.java:352))
в com.sun.enterprise.v3.server.ApplicationLifecycle.deploy (ApplicationLifecycle.java:500)
в com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication (ApplicationLoaderService.java:406)
на ком. sun.enterprise.v3.server.ApplicationLoaderService.postConstruct (ApplicationLoaderService.java:243)
в org.jvnet.hk2.internal.ClazzCreator.postConstructMe (ClazzCreator.java:329)
в org.jvnet.hk2.internal. ClazzCreator.create (ClazzCreator.java:377)
на org.jvnet.hk2.internal.SystemDescriptor.create (SystemDescriptor.java:461)
в org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.f indOrCreate (AsyncRunLevelContext.java:227)
на org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate (RunLevelContext.java:84)
в org.jvnet.hk2.internal.Utilities.createService (Utilities.java:2258)
на org.jvnet.hk2.internal.ServiceHandleImpl.getService (ServiceHandleImpl.java:105)
на org.jvnet.hk2.internal.ServiceHandleImpl.getService (ServiceHandleImpl.java:87)
в org.glassfish.hk2 .runlevel.internal.CurrentTaskFuture $ QueueRunner.oneJob (CurrentTaskFuture.java:1162)
at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture $ QueueRunner.run (CurrentTaskFuture.java:1147)
на java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)
в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617)
в java.lang.Thread.run (Thread.java:745)

login.conf:

spnego-server { 
    com.sun.security.auth.module.Krb5LoginModule required 
     useKeyTab=true 
     keyTab="ax.keytab" 
     principal=development 
    storeKey=true; 
}; 

krb5.conf

[libdefaults] 
    default_realm = LOC.COM 
    default_tkt_enctypes = aes256-cts aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc 
    default_tgs_enctypes = aes256-cts aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc 
    permitted_enctypes = aes256-cts aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc 
    forwardable = true 
    udp_preference_limit = 1 

[realms] 
    LOC.COM = { KDC = ax.loc.com default_domain = LOC.COM } 

[domain_realm] 
    .loc.com = LOC.COM 
    loc.com = LOC.COM 
    ax.loc.com = AX.LOC.COM 
+0

Непохожий предмет, который попался мне на глаза: вы говорите, что используете стеклянную рыбку v4.1, но в стеке упоминается стеклянная рыба v3. Это кажется подозрительным. – Gimby

+0

Вы говорите о 'com.sun.enterprise.v3.server'? – jareeq

+0

да, действительно. Я не знаю много о Glassfish, поэтому, возможно, это совершенно нормально, но мне это показалось мне довольно странным. Если вы поместите основную версию сервера в имя пакета, я бы предположил, что вы получаете пакет с v4 в нем при запуске Glassfish 4.x. Если бы я получил код с пакетом v3, я бы начал подозревать, что устаревшие серверные библиотеки используются. – Gimby

ответ

3

Вам необходимо переформатировать [realms] раздел krb5.conf как это:

[realms] 
    LOC.COM = { 
     KDC = ax.loc.com 
     default_domain = LOC.COM 
    } 

Есть некоторые изменения в krb5.conf разборе в JDK8 и JDK-7184246 : Simplify Config.get() of krb5 выглядит интересно. diff показывает значительные изменения в построчной обработке krb5.conf. Кажется, это сделал ваш файл, который был разобран под JDK7, который не поддается JDK8. Я думаю, теперь он хочет видеть закрывающие фигурные скобки на своих линиях.

Я не думаю, что существует строгая спецификация для krb5.conf, но большинство примеров показывают фигурные скобки на их собственных линиях и только одно назначение для каждой строки.

+1

Он работает! - Фактически, поиск в стеке ошибок был «sun.security.krb5.Config.get0», но он не был связан моим разумом, чтобы отформатировать его правильно - он выглядит так, как в java 8, формирование krb5.conf имеет решающее значение. Теперь я получил «Дефектный токен обнаружен (уровень механизма: GSSHeader не нашел правильный тег)», но это близко, чем предыдущее. – jareeq

+1

Речь идет о дефектной проблеме маркера. Сначала есть два способа: понизить java до 1.8.0_31, это последняя рабочая версия или дождаться обновления исправления. Спасибо javabrett за помощь с проблемой с отдельными строками в config. – jareeq