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

Spring security无效会话重定向

黎玺
2023-03-14

我在spring Boot1.2.3 web应用程序中使用spring security 4.0.1(也使用Spring-Session1.0.1,但这与本案无关)。

每当登录的用户会话过期时,Spring就会检测到无效的会话,并将用户重定向到“.invalidsessionURL(”/session/error/invalid“)”

然而,我只想被重定向,如果目标链接在私人区域内,也不是公共区域。

我怎么才能避免呢?

谢了。

 http
            .authorizeRequests()
            .anyRequest()
                .permitAll()
            .antMatchers("/privado/**")
                .authenticated()
            .and()
                .formLogin()
                .loginPage("/login")
                .failureUrl("/login?error")
                .defaultSuccessUrl("/")
                .successHandler(new SessionSuccessHandler())
            .and()
                .logout()
                .logoutSuccessUrl("/")
                .deleteCookies("JSESSIONID", "SESSION")
            .and()
                .sessionManagement()
                .invalidSessionUrl("/session/error/invalid")
            .sessionFixation()
            .changeSessionId()
            .maximumSessions(1)
            .expiredUrl("/session/error/expired")
            .and()
            .and()
                .csrf()
                .ignoringAntMatchers("/jolokia/**", "/v1.0/**");

多谢.

共有1个答案

查学文
2023-03-14

@robwinch-这似乎是一个非常常见的用例,从我运行的测试和注释来看,您提出的解决方案似乎不起作用。我相信在http://forum.spring.io/forum/spring-projects/security/94772-redirect-to-invalce-session-url-only-when-user-accesses-securited-resource中也提出了类似的问题,而且似乎从未解决过。我的想法是拥有多个http设置(使用xml配置)

<http pattern="/aboutUs**" security="none" />
<http pattern="/contact**" security="none" />
etc

当有相当多的不安全页面并且添加一个新的不安全页面需要更新配置时,这似乎并不理想。如果我们能为这个用例有一个“理想”的解决方案,那就太好了。随着Spring security 4.1的发布,似乎仍然没有明确的方法来实现这一点。

 类似资料:
  • 如何使会话中的特定bean无效? 我有这个示例代码。我使用外部上下文进行测试。失效会话();但它会销毁应用程序中会话中的所有bean,因为它会销毁整个会话。 但是,使用invalidateSession,会话中的所有bean都将被销毁,我只想使一个特定的“托管”bean失效,我如何做到这一点?

  • 问题内容: 我在2个不同的服务器中有2个应用程序-Tomcat(基本上是.WAR文件)和jBoss中的EAR。 EAR是可重用的应用程序,在这里我将对用户进行身份验证并将控件发送回Tomcat上的应用程序。进行身份验证时,我正在jBoss应用程序上创建一个会话对象。 当我将控件发送回Tomcat上的应用程序时,我将询问用户是否要注销身份验证应用程序。如果用户按下“是”按钮,我将不得不从身份验证应用

  • 因此,我尝试使用JSF托管bean上的方法访问HttpSession的属性 但是我得到了一个 为什么啊? 在我的一个会话bean被销毁之前,我需要访问该会话打开的外部服务的连接列表,它们当然存储在会话属性对象上。 我该怎么做?

  • 我们在API中创建了两个信封,并在第二个信封的redict URI的位置添加了第一个信封的URI,直到9月23日,它都运行良好,但随后从一个信封到另一个信封的重定向停止工作。 下面是代码的解释: 这里奇怪的是,如果我们直接在浏览器中打开第一个信封URL,它可以很好地工作,它也会将我们重定向到一个正确的URL,所以第一个信封的返回URL也可以很好地工作。 但当我们将第二个信封重定向到第一个信封的UR

  • 问题内容: 我正在研究的一个项目使用Spring 2.5和JPA,并将Hibernate用作提供程序。 我的DAO类扩展了JpaDaoSupport,因此我使用getJpaTemplate()方法获取了JpaTemplate。 后端数据库可以通过我的应用程序或第三方应用程序进行更改。 当第三方应用程序更改数据库(主要是配置数据更改)时,我需要为应用程序的用户提供一种使所有JPA会话无效并重新加载新

  • 问题内容: 我继承了一个非常古老的JSP应用程序(JDK 1.3.1_15),并试图插入会话固定漏洞。 在使用身份验证后,我成功使当前会话无效,但是在创建新会话时,将重新使用旧会话ID。 我可以在HTTP监视器中看到新的会话分配,只是再次使用了相同的数字。 在我之前,根本没有第二个响应头。 有人对如何生成新的会话ID有任何建议吗?我对JRUN4不太熟悉,但是在配置文档中拖拉并没有发现任何东西。 问