1

我使用带有 Spring 安全性的 JSF。我实施它。
我的代码:

@Named("userDetailsManagerImpl")
@Scope("application")
public class UserDetailBusinessImpl implements UserDetailsService {
    @Inject
    private MenuBackingBean menu;
}

一切似乎都很好。但是我必须将 MenuBackingBean 定义为应用程序范围。我只想要它的会话范围。所以我将范围更改为会话,但出现以下错误:
原因:org.springframework.beans.factory.BeanCreationException:创建名称为“userDetailsManagerImpl”的 bean 时出错:范围“会话”对于当前线程无效;如果您打算从单例中引用它,请考虑为该 bean 定义一个范围代理,
我认为此错误是由 spring security set application for default scope 引起的。
我在谷歌上搜索但没有解决这个问题(也许我没有正确的关键字搜索)。请帮我解决,谢谢
我使用的更多信息:

  • JSF 2.0
  • Spring 安全 3.1.2
  • 从 JSR 330 命名和注入
  • springframework 包中的范围注释
4

1 回答 1

1

我想你在某处有这个代码:

@Inject
private YourSessionBean yourSessionBean;

// later in some method
this.yourSessionBean.doSomething();

尝试在所有这些情况下使用 javax.inject.Provider:

@Inject
private Provider<YourSessionBean> yourSessionBeanProvider;

// later in some method
this.yourSessionBeanProvider.get().doSomething();
于 2012-12-13T11:05:30.717 回答