2016-02-10 9 views
1

Я использую Spring MVC с Spring Security ver4.0.1.RELEASE. Я пытался управлять одновременным входом пользователя в 1 и показывать сообщение об ошибке, если пользователь уже вошел в систему. Управление параллельным сеансом работает так, как ожидалось, но expireUrl ("") не работает. .formLogin(). LoginPage (""). FailUrl ("") всегда вызывается вместо expireUrl (""). Пожалуйста помоги.Параллельное управление сеансом всегда перенаправляется на failurl - Java Config

Ниже мой SpringSecurityConfiguration.java, который проходит WebSecurityConfigurerAdapter

protected void configure(HttpSecurity http) throws Exception { 
    http.authorizeRequests() 
    .antMatchers("/resources/**").permitAll() 
    .antMatchers("/", "/home").permitAll() 
    .antMatchers("/Access_Denied").permitAll() 
    .antMatchers("/login").permitAll()  
    .and().formLogin().loginPage("/login") 
    .failureUrl("/login?out=1") 
    .usernameParameter("userID").passwordParameter("password") 
    .and().csrf().and() 
    .logout() 
    .deleteCookies("JSESSIONID") 
    .logoutSuccessUrl("/logout") 
    .invalidateHttpSession(true) 
    .and().exceptionHandling().accessDeniedPage("/accessDenied.jsp") 
    .and() 
    .sessionManagement() 
    .maximumSessions(1) 
    expiredUrl("/login?time=1") 
    .sessionRegistry(sessionRegistry); 
} 

Мой Initializer класс выглядит, как показано ниже -

protected Filter[] getServletFilters() { 
    return new Filter[] { new HiddenHttpMethodFilter() }; 
} 


public void onStartup(ServletContext servletContext) throws ServletException { 
    super.onStartup(servletContext); 
    servletContext.addListener(new SessionListener()); 
    servletContext.addListener(new CustomHttpSessionEventPublisher()); 
} 

Приведенные ниже ссылки предоставляют дополнительную информацию для данного типа конфигурации безопасности -

http://codehustler.org/blog/spring-security-tutorial-form-login-java-config/ https://gerrydevstory.com/2015/08/02/managing-spring-security-user-session/

ответ

0

Вы пытались переместить управление сеансом на цепочку?

protected void configure(HttpSecurity http) throws Exception { 
    http.authorizeRequests() 
    .antMatchers("/resources/**").permitAll() 
    .antMatchers("/", "/home").permitAll() 
    .antMatchers("/Access_Denied").permitAll() 
    .antMatchers("/login").permitAll() 
    .and().sessionManagement() 
    .maximumSessions(1) 
    .expiredUrl("/login?time=1") 
    .sessionRegistry(sessionRegistry); 
    .and().formLogin().loginPage("/login") 
    .failureUrl("/login?out=1") 
    .usernameParameter("userID").passwordParameter("password") 
    .and().csrf().and() 
    .logout() 
    .deleteCookies("JSESSIONID") 
    .logoutSuccessUrl("/logout") 
    .invalidateHttpSession(true) 
    .and().exceptionHandling().accessDeniedPage("/accessDenied.jsp")  
} 
+0

Спасибо за ваш ответ Wermerb. FormLoging() не определен для управления сеансом, и, следовательно, это невозможно :) – dkumar