la sicurezza molla pre-autenticazione per modalità di sviluppo
-
21-08-2019 - |
Domanda
Mentre lo sviluppo di un'applicazione che è molto utile per essere in grado di accedere rapidamente utenti diversi, con ruoli diversi, per vedere come l'applicazione si presenta.
nomi utente di battitura e l'immissione della password non è divertente, e una perdita di tempo. Quello che mi piacerebbe fare è:
- aggiungere una pagina / pannello con l'elenco dei nomi utente disponibili;
- Cliccando su un nome utente genererà un evento per la sicurezza della molla che gli permette di riconoscere l'utente come autenticato, senza entrare password;
- dopo aver fatto clic sul link che sto autenticato come l'utente specificato.
NB :.. Le password sono hash e presentate in testo semplice usando le forme, in modo che codifica le password nel link non è un'opzione
Ovviamente questa funzione sarà presente al tempo di sviluppo solo.
Come posso raggiungere questo obiettivo?
Soluzione
L'ho fatto in questo modo per un'applicazione web:
Ho un parametro di configurazione nel context.xml
del server (ovviamente solo nel server di sviluppo). Questo parametro contiene un elenco di coma separato di nomi utente e password.
La pagina di login (jsp (x)) è sufficiente aggiungere un modulo supplementare e pulsante di invio per ogni nome utente, la password oggetto formano il parametro di contesto. Quindi, se un utente fa clic su tale pulsante il normale processo di login con i dati di accesso predefinito è trigged.
context.xml Server
...
<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>
...
Altri suggerimenti
Usa InMemoryDaoImpl per modalità di sviluppo. E 'molto facile per creare utenti e le password memorizzate nella memoria:
<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>
Nella modalità di sviluppo iniettare questo al vostro provider di autenticazione. Nella produzione sostituirlo con la corretta attuazione DB o LDAP.
Mi pare di capire che si desidera avere lo SpringSecurity si autenticare automaticamente se viene richiesto un certo URL specifico (e si dovrebbe avere un link a questo URL nel tuo pannello / pagina).
Come a scrivere un filtro personalizzato:
public class YourSpecialDevelopmentTimeFilter
extends AuthenticationProcessingFilter
implements SyncSecurityFilter
....
che sarebbe ignorare:
protected boolean requiresAuthentication(
HttpServletRequest request, HttpServletResponse response)
e tornare vero a seconda di alcuni parametri nel request
?
Naturalmente un'altra preoccupazione è di non avere questa funzionalità in ambienti di produzione. Che è sempre una cosa rischiosa di avere diversi codice di base per dev e prod .