【发布时间】:2016-08-20 06:54:06
【问题描述】:
我需要在我的 Spring MVC 应用程序中配置 expired-url。这是我的努力,但没有效果:
@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");
}
这没有任何影响,当用户的会话超时时,spring 不会将他重定向到/expired url,而只是将他重定向到/admin/login url。
更新:
我在 cmets and answer 中尝试了建议的解决方案,但没有看到任何效果。我还在方法的开头删除了addLogoutHandler()、logoutSuccessHandler() 和两个addFilterBefore(),但没有工作。
我也以这种方式尝试了另一种解决方案:
@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;
}
谁能帮我解决这个问题?
【问题讨论】:
-
@hamed, !Okay.. 我猜你没有必要的权限来访问
/expiredurl(我知道这很尴尬,因为这是一个用于过期处理的 url),所以 spring 重定向你登录页面甚至访问过期页面..尝试没有痛苦..只需尝试添加.antMatchers("/expired","...",...).permitAll(),然后检查您现在是否成功重定向到过期页面或仍然是登录页面。如果它不起作用,请告诉我..
标签: java spring-mvc spring-security