2013-04-02 3 views
6

Я следил за instructions, чтобы создать пользовательскую область безопасности для моей стеклянной рыбы. Все работает отлично, пользователи аутентифицированы правильно. Проблема, однако, следующие:Как использовать пользовательский принцип в пользовательской области безопасности (Glassfish)?

  • учетные данные пользователя зашифрованы в строке
  • область расшифровывает эту строку и выполняет аутентификацию по базе данных (работ)
  • Вместо того, чтобы использовать расшифрованные значения в качестве основного в securityContext передается зашифрованная строка .

Я уже пытался переопределить метод фиксации(), чтобы заменить _userPrincipal или прикрепить свою собственную реализацию с использованием getSubject().getPrincipals().add(new PrincipalImpl("user")). Ничего подобного не было. В основном вопрос прост как это: как я могу установить свой собственный руководитель в области безопасности в стеклянной платке таким образом, чтобы можно было использовать его вместе с инъецированным securityContext?

Моя среда:

  • Glassfish 3.1.2.2 (Build 5) полный профиль
  • приложение отстаем аутентификации является JAX-RS 1.1 на основе применения
  • SecurityContext получают с помощью инъекции

ответ

2

Я уже пытался переопределить метод фиксации(), чтобы заменить _userPrin cipal или присоединить мою собственную реализацию, используя getSubject(). getPrincipals(). add (new PrincipalImpl («пользователь»)). Ни не работал.

Какая ошибка (ие) вы получаете?

Несмотря на это, я думаю, что ваша проблема лежит на третьем этапе этого процесса. SecurityContext определяет только BASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH как AuthenticationScheme, поэтому, возможно, SecurityContext не может увидеть вашу реализацию вашей схемы или типа безопасности. Но вы можете попробовать эти шаги, и я надеюсь, что они будут работать на вас.

A- Реализовать Java аутентификации и авторизации службы (JAAS) LoginModule или продлить com.sun.appserv.security.AppservPasswordLoginModule

public class MyLoginModule extends AppservPasswordLoginModule { 

@Override 
protected void authenticateUser() throws LoginException { 
    if (!authenticate(_username, _password)) { 
//Login fails 
     throw new LoginException("LoginFailed"); 
    } 
    String[] myGroups = getGroupNames(_username); 
    commitUserAuthentication(myGroups); 
} 

private boolean authenticate(String username, String password) { 
    /* 
    Check the credentials against the authentication source, return true if   authenticated, return false otherwise 
    */ 
    return true; 
} 

private String[] getGroupNames(String username) { 
// Return the list of groups this user belongs to. 
} 

B- Реализация вашего класса царством.

public class MyRealm extends AppservRealm { 

@Override 
public void init(Properties props) 
throws BadRealmException, NoSuchRealmException { 
//here you initialize the realm 
} 
@Override 
public String getAuthType() { 
return "Custom Realm"; 
} 
} 

C- Установка и настройка царства и LoginModule на сервер.

Для этого вам необходимо посмотреть на JSR 196 и написать собственный SAM, внедряя javax.security.auth.message.module.ServerAuthModule. Взгляните на ссылку ниже. https://blogs.oracle.com/enterprisetechtips/entry/adding_authentication_mechanisms_to_the

+0

Поскольку вопрос был задан 10 месяцев назад, я больше не могу сказать, какие ошибки у нас были. К сожалению, я также не смогу проверить ваши подходы, потому что мы использовали другое решение. Но так как вы приложили все усилия, чтобы попытаться ответить на такой старый вопрос, я все равно отвечу на ваш ответ :) – Kai

Смежные вопросы