在 Spring Boot 中使用 Spring Security 時不能使用任何類型的 SessionListener

鮑里薩夫·日瓦諾維奇

我有一個使用 Session 的非常基本的 Spring Security 設置。我的問題是我找不到使用任何類型的會話偵聽器(Spring 和 Servlet API 版本)來偵聽 SessionCreated 事件的方法。登錄正在工作並且會話正在正確創建。

我需要偵聽器的原因是因為我想初始化某些會話屬性(例如購物卡丁車、最近商品列表),以便我可以從@Controller請求映射中無縫訪問它們,而不必擔心會話屬性是否已初始化。

安全配置代碼:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    DataSource dataSource;

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.ALWAYS)
                .and()
                .authorizeRequests()
                .antMatchers("/secured/**").authenticated()
                .anyRequest().permitAll()
                .and()
                .formLogin()
                .loginPage("/login")
                .and()
                .logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/")
                .and()
                .rememberMe().key("unique");
    }

    ...
}

首先,我嘗試了最基本的會話偵聽器:

@Component
public class InitHttpSessionListener implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent event) {
        ...
    }
}

我也試過這裡的答案,但也沒有用

上帝

從您的評論中可以清楚地看出,您正在使用Spring Session JDBC由於 JDBC 的性質,它不支持會話事件的發布,因此您無法偵聽這些事件。

作為一種解決方法,您可以創建自己的AuthenticationSuccessHandler並將用於填充的邏輯Session放在那裡。或者AuthenticationSuccessEvent使用 Spring 事件偵聽器收聽(進入會話會有點困難,但可行)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Spring Boot 1.x配置SessionListener

无法使用Spring Boot Security登录

在XwsSecurityInterceptor中使用SpringPlainTextPasswordValidationCallbackHandler时使用Spring Security身份验证失败的Spring Boot

如何在Spring Boot中使用spring-security.xml中的配置?

如何使用 Spring Security 在 Spring Boot 中管理会话?

如何使用Spring Boot和Spring Security保护REST API?

使用AspectJ的Spring Boot + Spring Security无法正常工作

在Spring Boot中使用@CrossOrigin

在Spring Boot中使用Pageable

在Spring Boot中使用@Profile

在Spring Boot中使用Disruptor

当 Shiro 与 Spring 和 web 过滤器一起使用时,如何添加 Shiro SessionListener?

配置Spring Boot Security在Grails 3.0中使用BCrypt密码编码

如何在Spring Boot Security中使用户的先前会话无效

如何在Spring Boot Security 2.0中使用2种不同的身份验证方法

无法使用KeycloakAutoConfiguration使用Spring Boot Security UnsatisfiedDependencyException设置Keycloak

如何使用Spring Boot和Spring Security OpenId配置Spring 4.0

在Spring Boot应用程序中配置Spring Security时,如何在没有@Configuration的类中使用@Bean?

Spring Boot Security CORS

Spring Boot Security 不忽略使用 WebSecurity 的目录

使用 Spring Boot Security 和 React 登录 Google

如何使用Spring Boot Security从Facebook获取访问令牌

如何使用Spring Boot Security允许原始HttpServletRequest处理登录

使用Spring Security的PasswordEncoder

可以在Spring Security中使用Spring Social吗?

在控制器中使用@security批注的Spring Security

在 Spring Boot 中使用 Mockito 模拟 JsonNode

如何在Spring Boot中使用KeyHolder?

在Spring -boot中使用ForEach进行迭代