Devo configurare expired-url
nella mia applicazione Spring MVC. Qui è il mio sforzo, ma non ha alcun effetto:spring security - expiredUrl non funziona
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(adminAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(customerAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.csrf()
.disable()
.authorizeRequests()
.antMatchers("...", "...", "...").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/admin/login")
.and()
.logout()
.addLogoutHandler(customLogoutHandler())
.logoutSuccessHandler(customLogoutSuccessHandler())
.logoutUrl("/logout")
.deleteCookies("remove")
.invalidateHttpSession(true)
.permitAll()
.and()
.sessionManagement()
.maximumSessions(1)
.expiredUrl("/expired");
}
questo non deve alcun effetto e quando i tempi di sessione dell'utente fuori, la primavera non lo reindirizzano a /expired
URL e solo lui reindirizza al /admin/login
URL.
Aggiornamento:
ho provato suggerito soluzioni nei commenti e risposta, ma non ha visto alcun effetto. Inoltre ho rimosso addLogoutHandler()
, logoutSuccessHandler()
e due addFilterBefore()
all'inizio del metodo, ma non funzionante.
Inoltre ho provato un'altra soluzione in questo modo:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(sessionManagementFilter(), SessionManagementFilter.class)
.csrf()
.disable()
.authorizeRequests()
.antMatchers("...", "...", "...").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/admin/login")
.and()
.logout()
.logoutUrl("/logout")
.deleteCookies("remove")
.invalidateHttpSession(true)
.permitAll();
}
@Bean
public SessionManagementFilter sessionManagementFilter() {
SessionManagementFilter sessionManagementFilter = new SessionManagementFilter(httpSessionSecurityContextRepository());
sessionManagementFilter.setInvalidSessionStrategy(simpleRedirectInvalidSessionStrategy());
return sessionManagementFilter;
}
@Bean
public SimpleRedirectInvalidSessionStrategy simpleRedirectInvalidSessionStrategy() {
SimpleRedirectInvalidSessionStrategy simpleRedirectInvalidSessionStrategy = new SimpleRedirectInvalidSessionStrategy("/expired");
return simpleRedirectInvalidSessionStrategy;
}
@Bean
public HttpSessionSecurityContextRepository httpSessionSecurityContextRepository(){
HttpSessionSecurityContextRepository httpSessionSecurityContextRepository = new HttpSessionSecurityContextRepository();
return httpSessionSecurityContextRepository;
}
Qualcuno potrebbe aiutarmi a risolvere questo problema?
@hamed, okay .. immagino che non si dispone dell'autorizzazione necessaria per accedere '/ url expired' (so che questo è imbarazzante dal momento che si tratta di un URL per la scadenza! maneggiando), quindi spring reindirizza alla pagina di accesso anche per accedere alla pagina scaduta. Non c'è niente di doloroso nel provare .. Basta provare ad aggiungere '.antMatchers ("/expired "," ... ", ...). allowAll() ', quindi controlla se ora sei reindirizzato correttamente alla pagina scaduta o ancora la pagina di accesso. Fammi sapere se non funziona .. –