spnego.jar переключается с Java 7 на исключение приведения Java 8

Я использую spnego.jar от dfelix с Glassfish 4.1 в качестве фильтра в web.xml. Я задал вопрос на форуме проекта, но ответа не получил.

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

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

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

логин.конф:

krb5.conf

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

Вам нужно переформатировать раздел

    spnego-server {
    com.sun.security.auth.module.Krb5LoginModule required
       useKeyTab=true
       keyTab="ax.keytab"
       principal=development
    storeKey=true;
};
файла
[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
следующим образом:

[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

person jareeq    schedule 19.05.2015    source источник
comment
Вы говорите о _1_ ?   -  person Gimby    schedule 19.05.2015
comment
да действительно знаю. Я мало что знаю о Glassfish, так что, возможно, это совершенно нормально, но мне это показалось довольно странным. Если вы укажете основную версию сервера в имени пакета, я предполагаю, что вы получите пакет с v4 при запуске Glassfish 4.x. Если бы я тогда получил код с пакетом v3, я бы начал подозревать, что используются устаревшие серверные библиотеки.   -  person jareeq    schedule 19.05.2015
comment
это нормально, в Glassfish 4.0, 4.1 тоже появляется.   -  person Gimby    schedule 20.05.2015
comment
Оно работает! - на самом деле, глядя на стек ошибок, там было _1_, но мне не приходило в голову его правильно отформатировать - похоже, что в java 8 форматирование krb5.conf имеет решающее значение. Теперь я получил _2_, но это близко к предыдущему.   -  person jareeq    schedule 20.05.2015


Ответы (1)


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

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

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

Мое внимание привлекла вещь не по теме: вы говорите, что используете Glassfish v4.1, но в трассировке стека упоминается Glassfish v3. Это кажется подозрительным.

person javabrett    schedule 19.05.2015
comment
Речь идет о выпуске дефектного токена. Во-первых, есть 2 способа - понизить java до 1.8.0_31, это последняя рабочая версия, или дождаться обновления исправления. Спасибо javabrett за помощь в решении проблемы с отдельными строками в конфиге. - person jareeq; 19.05.2015
comment
[glassfish 4.1] [СЕРЬЕЗНЫЙ] [] [javax.enterprise.web] [tid: _ThreadID=16 _ThreadName=RunLevelControllerThread-1431425761516] [timeMillis: 1431425776202] [levelValue: 1000] [[ WebModule[/ax]Exception start filter SpnegoHttpFilter< br> 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) на 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:228 6)
на com.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)
в org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:291)
в 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)
на com.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.interna l.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)
на org.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
в sun.security.krb5.Config.get0(Config.java:287)
в sun.security.krb5. Config.getString0(Config.java:268)
на sun.security.krb5.Config.getAll(Config.java:240)
на sun.security.krb5.Con fig.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.attemptAuthentication(Krb5LoginModule.java:776)
в com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:617)
в sun.reflect.NativeMethodAccessorImpl.invoke0( Собственный метод)
в sun.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)
в javax.security.auth.l ogin.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)
в org.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)
на 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)
на co m.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)
в org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:291)
в 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)
на com.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.cre ate(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)
на org.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) - person jareeq; 22.05.2015