并发会话管理总是重定向到 failureurl - Java Config
Posted
技术标签:
【中文标题】并发会话管理总是重定向到 failureurl - Java Config【英文标题】:Concurrent session management always redirecting to failureurl - Java Config 【发布时间】:2016-05-20 19:25:15 【问题描述】:我正在使用 Spring MVC 和 Spring Security ver4.0.1.RELEASE。 我试图将并发用户登录控制为 1,如果用户已经登录,则显示错误消息。 并发会话管理按预期工作,但 expireUrl("") 不工作。始终调用 .formLogin().loginPage("").failureUrl("") 而不是 expireUrl("")。请帮忙。
下面是我的 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/
【问题讨论】:
【参考方案1】:您是否尝试过将会话管理上移到链上?
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")
【讨论】:
感谢您的回复。 formLoging() 没有为会话管理定义,因此这是不可能的:)以上是关于并发会话管理总是重定向到 failureurl - Java Config的主要内容,如果未能解决你的问题,请参考以下文章
Grails Spring Security - 登录后总是重定向到特定页面?