Spring Security升级到3.1.0.RELEASE - 找不到setContextClass来定义应该使用哪个实例来创建一个新的SecurityContext

时间:2017-05-25 16:09:34

标签: spring-security

HttpSessionContextIntegrationFilter 的文档说明如下

“如果由于某种原因无法从HttpSession获取有效的SecurityContext,则会创建并使用新的SecurityContext。创建的对象将是setContextClass(Class)方法定义的实例(默认为SecurityContextImpl。“

但是它说“已弃用使用SecurityContextPersistenceFilter而不是。”

我已经交换到 SecurityContextPersistenceFilter ,但现在我无法弄清楚如何将实例设置为我们自己的SecurityContext实现。

我整天都在寻找但没有运气。我希望它不是一个盯着我的答案! :/非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在Spring 3.2.4中,SecurityContextPersistenceFilter获得SecurityContext,如下所示:

SecurityContext contextBeforeChainExecution = repo.loadContext(holder);

默认repoHttpSessionSecurityContextRepository,可以像这样实例化SecurityContext

protected SecurityContext generateNewContext() {
    return SecurityContextHolder.createEmptyContext();
}

因此,如果您希望自己的策略生成新的SecurityContext,则可以执行以下操作:

  1. 延长HttpSessionSecurityContextRepository(让我们说出你的名字MySecurityContextRepository
  2. 覆盖其generateNewContext()方法
  3. 通过构造函数参数将MySecurityContextRepository注入SecurityContextPersistenceFilter实例(不推荐使用setSecurityContextRepository() setter)