2009-07-01 5 views
2

При разработке приложения очень полезно иметь возможность быстро входить в систему как разные пользователи с разными ролями, чтобы увидеть, как приложение представляет себя.Предварительная аутентификация системы безопасности для обеспечения безопасности

Ввод имен пользователей и ввод пароля - не забава, а пустая трата времени. Я бы хотел:

  • добавить страницу/панель со списком доступных имен пользователей;
  • нажатие на имя пользователя создаст событие для безопасности Spring, которое позволит ему распознавать пользователя как аутентифицированный, не вводя паролей;
  • после нажатия ссылки Я аутентифицирован как указанный пользователь.

N.B.: Пароли хэшируются и передаются в текстовом формате с использованием форм, поэтому кодирование паролей в ссылках не является вариантом.

Очевидно, эта функция будет присутствовать только во время разработки.

Как я могу это достичь?

ответ

2

Я сделал это так для веб-приложения:

У меня есть параметр конфигурации в context.xml сервера (конечно, только на сервере разработки). Этот параметр содержит отдельный список имен пользователей и паролей.

На странице входа (jsp (x)) просто добавьте дополнительную форму и отправьте кнопку для каждого имени пользователя, пароля, введите параметр контекста. Поэтому, если пользователь нажимает на эту кнопку, запускается обычный процесс входа в систему с предопределенными данными входа.

Контент сервера.XML

... 
<Context> 
    ... 
    <Parameter name="quickLogin" 
       value="admin:passwd,user:otherPasswd" 
       override="false" /> 
</Context> 

login.jspx

... 
<!-- Login for debugging purposes -->  
<c:forTokens items="${initParam.quickLogin}" delims="," var="loginPassword"> 
    <c:set var="login" value="${fn:split(loginPassword, ':')[0]}" /> 
    <c:set var="password" value="${fn:split(loginPassword, ':')[1]}" /> 

    <form name="debugLogin" action="${form_url}" method="POST" > 
     <crsf:hiddenCrsfNonce/> 
     <input type="hidden" name='j_username' value="${fn:escapeXml(login)}" /> 
     <input type="hidden" name='j_password' value="${fn:escapeXml(password)}" /> 
     <input type="submit" value="${fn:escapeXml(login)} login" /> 
    </form> 
</c:forTokens> 
... 
0

Насколько я понимаю, вы хотели бы, чтобы SpringSecurity автоматически аутентифицировала вас, если запрашивается какой-то определенный URL (и у вас будет ссылка на этот URL-адрес на вашей панели/странице).

Как о написании пользовательского фильтра:

public class YourSpecialDevelopmentTimeFilter 
extends AuthenticationProcessingFilter 
implements SyncSecurityFilter 
.... 

что бы переопределить:

protected boolean requiresAuthentication(
    HttpServletRequest request, HttpServletResponse response) 

и возвращает истину, в зависимости от некоторых параметров в request?

Конечно, другая проблема заключается не в том, чтобы иметь эту функциональность в производственных условиях. Это всегда рискованно иметь другую кодовую базу для dev и prod.

4

Используйте InMemoryDaoImpl для разработки. Очень легко создать пользователей и пароли, хранящиеся в памяти:

<bean id="userDetailsService" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl"> 
    <property name="userMap"> 
    <value> 
     admin=admin,ROLE_ADMIN,ROLE_USER 
     user1=user1,ROLE_USER 
     user2=user2,ROLE_USER 
    </value> 
    </property> 
</bean> 

В режиме разработки вставьте это для своего провайдера аутентификации. В производстве замените его на правильную реализацию БД или LDAP.

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