当前位置: 首页 > 知识库问答 >
问题:

并发会话管理总是重定向到故障url-Java配置

常温文
2023-03-14

我正在使用Spring MVC和Spring Security ver4。0.1.释放我试图将并发用户登录控制为1,如果用户已经登录,则显示一条错误消息。并发会话管理按预期工作,但expireUrl(“”)不工作。这个formLogin()。登录页面(“”)。始终调用failureUrl(“”)而不是expireUrl(“”)。请帮忙。

下面是我的SpringSecurityConfiguration。扩展WebSecurity配置适配器的java

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);   
}

我的初始化类看起来像下面-

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个答案

窦哲彦
2023-03-14

您是否尝试将会话管理提升到链上?

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")       
}
 类似资料:
  • 在spring security 4中,并发会话不重定向到过期的url,而是重定向到失败的身份验证url。下面是java配置代码片段。 过期url的行为不一致,有时起作用,有时不起作用。会有什么问题?

  • 我正在尝试创建无状态安全性,从而将JWT令牌存储在Cookie而不是SESSION中。 问题是,如果没有会话,就不知道原始请求(在身份验证页面弹出之前)。所以在第77行这里savedRequest是空的。 这看起来很奇怪,我想我做错了什么。如何允许页面重定向到登录无状态会话后请求的原始URL? > 我禁用会话 然后,我创建了一个自定义的AuthenticationSuccessHandler,它扩

  • 问题内容: 我正在开发一个小型Web应用程序,很有趣,目前仅使用Java Servlet。我有两个页面,test1和test2。目前,我正在test1中创建一个新会话,如下所示: 在test2中,我像这样检索会话: 因此,问题在于,如果我先进入test2,我总是会得到一个有效的会话,因为浏览器会创建一个会话。我想限制从test1到test2的流量,因此我必须先进入test1。我的计划是最终创建一个

  • Envoy提供了一套开箱即用, 选择加入的故障恢复功能,可以在应用程序中受益。功能包括: 超时 带超时预算有限重试以及重试之间的可变抖动 并发连接数和上游服务请求数限制 对负载均衡池的每个成员进行主动(定期)运行健康检查 细粒度熔断器(被动健康检查)- 适用于负载均衡池中的每个实例 这些功能可以通过Istio的流量管理规则在运行时进行动态配置。 重试之间的抖动使重试对重载的上游服务的影响最小化,而

  • 故障注入 本任务将演示如何注入延迟并测试应用弹性。 开始之前 参考文档安装指南中的步骤安装Istio。 部署BookInfo示例应用。 首先通过请求路由任务,或通过执行下列命令,来初始化应用的版本路由信息: 注意:这里假设尚未设置任何路由。如果已经为示例创建了存在冲突的路由规则,则需要在下列两条命令或其中之一使用replace代替create。 istioctl create -f sampl

  • 虽然Envoy sidecar/proxy为在Istio上运行的服务提供了大量故障恢复机制,但测试整个应用程序端到端的故障恢复能力依然是必须的。错误配置的故障恢复策略(例如,跨服务调用的不兼容/限制性超时)可能导致应用程序中关键服务持续不可用,从而导致用户体验不佳。 Istio启用协议特定的故障注入到网络中,而不是杀死pod,延迟或在TCP层破坏数据包。我们的理由是,无论网络级别的故障如何,应用层