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

在Spring Boot中使用Spring Security时不能使用任何类型的SessionListener

公孙阳文
2023-03-14

我有一个非常基本的Spring Security设置使用session。我的问题是,我找不到使用任何类型的会话侦听器(Spring和Servlet API版本)来侦听SessionCreated事件的方法。登录正在工作,会话正在正确创建。

@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) {
        ...
    }
}

我也试过这里的答案,也不起作用

共有1个答案

崔琦
2023-03-14

从您的评论中可以清楚地看到,您使用的是Spring Session JDBC。由于JDBC的性质,它不支持会话事件的发布,因此您无法监听这些事件。

作为解决办法,您可以创建自己的AuthenticationSuccessShandler,并将填充session的逻辑放在其中。或者使用Spring事件侦听器侦听AuthenticationSuccessEvent(进入会话比较困难,但可以做到)。

 类似资料:
  • 问题内容: 我目前在我的项目中使用类型,并且遇到问题。 上面的代码中的可以是或。这是类型的原因。 我知道不是。 我需要知道的是如何使它工作。 问题答案: 可编码需要知道要转换的类型。 首先,我将尝试解决不知道类型的问题,看看是否可以解决它并使它更简单。 否则,我目前认为解决您的问题的唯一方法就是使用如下所示的泛型。

  • 问题内容: 在哪种情况下,您应该使用原始类型()还是引用类型()? 问题答案: 在哪种情况下,您应该使用原始类型()还是引用类型()? 根据经验,除非必须使用包装原始语言的类,否则我将使用原始语言(例如)。 一种情况是必须使用包装器类,例如在使用泛型的情况下,因为Java不支持将原始类型用作类型参数: 而且,在许多情况下,我将利用autoboxing和unboxing的优势,因此不必显式执行从原语

  • 在我的Spring Boot应用程序中,我尝试实现模板方法,在我的具体类中,我尝试使用泛型,如下所示: 模板界面:不确定我是否需要使用它? 模板抽象类: 混凝土等级: 我在dto中得到“无法解析‘T’中的方法‘getName’”。getName()行输入AbstractPDFGenerator。 我的问题是: 1.为了解决这个问题,我想从继承和的基类扩展T。但是,我不想从基类继承它们,因为它们没有

  • 假设您有以下抽象java类: 以及以下子类层次结构: 假设您需要在超类上的给定点使用泛型类型,例如,为了在构造函数上使用gson库将请求json反序列化到特定的请求对象,如下所示: 您需要变量“typeOfI”中的泛型I类型 是否有一个全局解决方案,允许获得由尊重以下约束的具体子类指定的泛型类型? 该类型是在运行时获取的,与子类的层次结构无关(这个问题的示例可能更复杂) 开发人员只需要定义泛型来扩

  • 我想保存学生和教师的信息使用单一的邮政API。如果我选择“学生”类型,数据将保存在学生表中。如果我选择“教师”类型,数据将保存在教师表中。但是该操作将由一个API调用完成。

  • 我试图测试一个@Controller类,其中有来自POJO的列表。我可以在另一个@RESTController类中使用@Autowired来连接控制器,但在同样的情况下,我不能将其用于测试。 user.java UserContrell3.java 在下一个类中,userresource.java我可以做@autowired 但是,在测试类UserTest.java中。我不能: 提前感谢!