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?

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top