В настоящее время я пытаюсь написать несколько модулей LoginModules, чтобы пользователи могли войти в приложение Java.Вот мой файл .java.login.config:
"Java Application" {
path.to.login.module.PamLoginModule sufficient;
path.to.login.module.OtherLoginModule sufficient;
};
Так что, если PamLoginModule не работает, я хочу передать информацию в OtherLoginModule.Таким образом, OtherLoginModule не нужно будет снова запрашивать имя пользователя и пароль.Поэтому я предполагаю, что для этого и используется карта sharedState в функции initialize ():
initialize(Subject subject, CallbackHandler callbackHandler,
Map<String,?> sharedState, Map<String,?> options)
Проблема в том, что вы не можете поместить вещи в карту sharedState.Если я делаю что-то вроде:
sharedState.put("key", value); // Value is a string
Компилятор жалуется:
path/to/login/module/PamLoginModule.java:48: put(java.lang.String,capture#833 of ?) in java.util.Map<java.lang.String,capture#833 of ?> cannot be applied to (java.lang.String,java.lang.String)
this.sharedState.put("key", value);
Я нашел способ обойти это, но я хочу знать, каков правильный путь.
Во-первых, я могу использовать версию инициализации java 1.4.2, которая выглядит следующим образом:
initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options)
Таким образом, я просто получаю общие карты и могу просто привести объект Map к карте
Map<String,Object> this.sharedState = (Map<String,Object>)sharedState;
Проблема в том, что я все еще получаю непроверенные исключения приведения.Теперь я знаю, что люди, которые создали интерфейс LoginModule, не глупы, поэтому мне интересно, почему они сделали карту sharedState Map<String,?>
вместо Map<String,Object>
.Кроме того, есть ли лучший способ поместить вещи в карту sharedState?
Спасибо!