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

上下文注入的SecurityContext为空

柳刚豪
2023-03-14
@Context
private SecurityContext secContext;
@RequestScoped
public class CurrentUserProducer implements Serializable {

    /**
     * Default
     */
    private static final long serialVersionUID = 1L;

    @Context
    private SecurityContext secContext;

    /**
     * Tries to find logged in user in user db (by name) and returns it. If not
     * found a new user with role {@link UserRole#USER} is created.
     * 
     * @return found user a new user with role user
     */
    @Produces
    @CurrentUser
    public User getCurrentUser() {
        if (secContext == null) {
            throw new IllegalStateException("Can't inject security context - security context is null.");
        //... code to retrieve or create new user
        return user;
    }

}

那么如何解决这个问题呢?为什么SecurityContext为空。

共有1个答案

奚英朗
2023-03-14

正如我在评论中所说的

SecurityContext是一个JAX-RS组件,只能注入到其他JAX-RS组件中。你只有一个CDI豆。您可以尝试使其成为一个EJB,并注入SessionContext。请参见以编程方式保护企业Bean

还没有测试,但似乎为行动工作。这是一个EE堆栈解决方案。

@Provider
public class UserContextFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext context) throws IOException {
        SecurityContext securityContext = context.getSecurityContext();
        String username = securityContext.getUserPrincipal().getName();

        ResteasyProviderFactory.pushContext(User.class, new User(username));
    }  
}
 类似资料:
  • 这是模块类 这是我的viewmodel构造函数 当我运行应用程序时,我得到这个错误,我认为不要在模块中注入所需的应用程序上下文,任何帮助都会被赞赏 C:\XYZ\XYZ\AndroidStudioProjects\CarAndroid\app\build\generate\source\kapt\debug\com\sw\car\baseclasses\CarApp_HiltComponents.

  • 我正在测试一个(Eclipse 4)应用程序(我不是在谈论单元测试,而是更多的集成和系统测试)。 我有一个反复出现的问题需要解决。我必须将测试中的上下文“注入”(@inject)到被测试的类中。换句话说,我需要测试做应用程序通常做的事情。 我所做的是创建一个私有方法: 我(错误地)期望刚才在这里创建的上下文可以在测试中的一个类中使用。例如。: 肯定少了些什么!我也创建了activator(为简洁起

  • 我正在运行一个带有嵌入式Tomcat的Spring Boot1.2.3应用程序。 示例: 但是Spring@Controller@RequestMapping和Spring Security的似乎并不尊重它。两者仍然可以像一样工作。

  • 在Jersey 2中,我可以将一个定制的、请求特定的值注入到我的资源中吗?具体来说,我想注入一个< code>MyThing,它可以从我的自定义安全上下文< code>MySecurityContext中派生出来。我想直接注入< code>MyThing来使代码变得干净。 有什么办法可以做到这一点吗?根据这个问题,它不能使用尽管本文和此示例表明它可能是可能的。 使用身份验证筛选器,我可以使用以下代