Sto costruendo un'applicazione basata su web a molla mvc e sicurezza a molla.Forzare l'utente a cambiare la password scaduta nella sicurezza di primavera
Ho implementato la funzionalità Reimposta password. L'amministratore di sistema reimposterà la password di qualsiasi utente. La password generata verrà inviata all'utente e la stessa verrà aggiornata nel database.
Ora voglio ogni volta che l'utente effettua il login con password generata casualmente, voglio costringere l'utente a cambiare la sua password.
Si prega di dare un'occhiata al mio utente TABELLA.
userid bigint (20)
nome utente varchar (20)
la password varchar (65)
email varchar (50)
cognome varchar (20)
cognome varchar (20)
nomegruppo varchar (50)
tinyint abilitato (1)
credentialsNonExpired tinyint (1)
MY Authenticat Provider ioni
<!--
Configuring Authentication Provider to make use of spring security
provided Jdbc user management service
-->
<authentication-provider user-service-ref="jdbcUserService">
<!--
Configuring SHA-1 Password Encoding scheme to secure user credential
-->
<password-encoder ref="sha1PasswordEncoder" />
</authentication-provider>
</authentication-manager>
ho usato JDBCUserDetailsService estendere JDBCDaoImpl come jdbcUserService.
Voglio impostare credentialNonExpired a false colonne della mia tabella utente quando sto reimpostando la password.
Sono in grado di farlo.
Ma quando eseguo il login, sicurezza primavera JDBCuserdetailsservice loadUserbyUsername ottenere solo nome utente, password, colonne abilitate e resto di tutti i campi impostati su true.
protected List<UserDetails> loadUsersByUsername(String username) {
return getJdbcTemplate().query(usersByUsernameQuery, new String[] {username}, new RowMapper<UserDetails>() {
public UserDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
String username = rs.getString(1);
String password = rs.getString(2);
boolean enabled = rs.getBoolean(3);
return new User(username, password, enabled, true, true, true, AuthorityUtils.NO_AUTHORITIES);
}
});
}
Ma io voglio attuale credentialNonExpired campo che è impostato per la reimpostazione della password, in modo che la sicurezza primavera lancerà CREDENTIALEXPIREDEXCEPTION.
Lo sto raggiungendo caricando il metodo di cui sopra, ma c'è un altro modo per reindirizzare l'utente per cambiare la pagina della password quando accedono con la password scaduta.
Per favore dimmi come posso farlo?
Sto lavorando a un problema molto simile e sto seguendo questo percorso ... c'è una raccomandazione su come gestire al meglio la logica della password di modifica? Sembra provare a replicare tutte le normali funzionalità di "accesso" (controllare le password, compilare SecurityContextHolder, restituire i codici di errore) potrebbe essere complicato ... – bimsapi
Sto lavorando con JPA e modelli e sto aggiornando questi direttamente senza passare attraverso il intero ciclo di sicurezza di primavera. Mi è sembrato il modo più veloce. Ovviamente dopo aver cambiato la password, reindirizzo l'utente alla pagina di accesso. –
Sì, penso che la tua strada sarebbe stata più veloce :) Ecco cosa ho finito per fare - * 'UsernamePasswordResetAuthentication' con nome utente, password e nuova password * Pagina di accesso con nuovi campi/conferma password quando opportuno * Accesso filtro che crea l'oggetto di autenticazione corretto, in base alla richiesta * Custom AuthenticationProvider (già presente per motivi diversi), esteso a 1) autenticarsi con password esistente, 2) aggiornare la password memorizzata e 3) re-autenticare con la nuova password . – bimsapi