2009-11-18 4 views
0

Моя система имеет 2 подсистемы. Каждая подсистема имеет различный набор пользователей. У каждого пользователя есть дополнительное поле «SystemName», которое может использоваться для определения того, к какой системе принадлежит этот пользователь.Пользовательская аутентификация

В формах входа (1 форма для каждой подсистемы) я добавил скрытое поле, указывающее тип формы (содержащий значение SystemName).

Как правило, проверка довольно проста:

if (user.systemName == params.systemName) { 
    proceed with regular login 
} else { 
    throw standard login error 
} 

Я пытался поставить эту проверку на мой пользовательский DaoAuthenticationProvider, но он не имеет доступа к «params.systemName».

Где я могу поместить этот код, чтобы сделать Acegi аутентификацией моих пользователей с этой проверкой?

Заранее спасибо.

ответ

1

Так я сделал это на Java. Продлить WebAuthenticationDetails:

import javax.servlet.http.HttpServletRequest; 
import org.acegisecurity.ui.WebAuthenticationDetails; 

public class SystemNameWebAuthenticationDetails extends WebAuthenticationDetails { 

    public SystemNameWebAuthenticationDetails() { 
     super(); 
    } 

    public SystemNameWebAuthenticationDetails(HttpServletRequest request) { 
     super(request); 
     this.systemName = request.getParameter("systemName"); 
    } 

    public String getSystemName() { 
     return systemName; 
    } 

    private String systemName; 
} 

установить его в фильтре аутентификации:

<bean id="authenticationProcessingFilter" 
     class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"> 
     ... 
     <property name="authenticationDetailsSource"> 
     <bean class="org.acegisecurity.ui.AuthenticationDetailsSourceImpl"> 
      <property name="clazz" value="SystemNameWebAuthenticationDetails"/> 
     </bean> 
     </property> 
</bean> 

Позже вы можете получить доступ к этому свойству в процессе аутентификации с просьбой детали к объекту аутентификации. Или сделать это:

SecurityContextHolder.getContext().getAuthentication().getDetails() 
Смежные вопросы