java - Soteria HttpMessageContext.setRegisterSession() 没有按预期工作?

标签 java security session authentication jakarta-ee

我已经实现了自定义 HttpAuthenticationMechanism使用 Soteria/Java EE Security 提供身份验证的子类框架。我的身份验证工作正常。但是,我注意到当我调用 HttpMessageContext.setRegisterSession(String, Set<String>) 时创建 Java EE Session ,这种行为不是我所期望的。我希望经过身份验证的身份与网络相关联 Session ,还有我的 AuthenticationMechanismvalidateRequest(HttpServletRequest req, HttpServletResponse res, HttpMessageContext ctx)后续请求不会调用该方法。然而,我观察到的是 validateRequest()在每个请求上调用,即使用户已经成功通过身份验证也是如此。

我可以使用 @AutoApplySession 获得我想要的行为我的注释AuthenticationMechanism类,但这不是我想要的行为。我想根据提供的凭据类型选择是否创建 session 。

是我理解的setRegisterSession()方法不对?或者这是 Soteria 中的错误?

最佳答案

@AutoApplySession 是在 Soteria ( JSR 375 ) 中执行此操作的新方法。如果它不符合您的需求(因为您需要记住经过身份验证的身份或根据其他凭据信息在同一 HTTP session 期间对所有请求重新进行身份验证),validateRequest 方法仍将被调用,无论您是否调用 HttpMessageContextsetRegisterSession 方法。 HttpMessageContext.setRegisterSession 将使容器记住凭据但不会自动重用它们,您仍然需要通过执行与 Soteria 的 AutoApplySessionInterceptor 相同的操作来使容器重用身份验证身份.因此,在实现 HttpAuthenticationMechanism 的类中,您应该在 validateRequest 方法中执行实际身份验证逻辑之前添加以下代码:

Principal userPrincipal = request.getUserPrincipal();

if (userPrincipal != null) {   
    httpMessageContext.getHandler().handle(new Callback[] { 
                new CallerPrincipalCallback(httpMessageContext.getClientSubject(), userPrincipal) }
            );

    return AuthenticationStatus.SUCCESS; 
}

另请参阅此 answer由 Arjan Tijms 创作。虽然它是关于 JASPIC 而不是 Soteria,但在这种情况下我认为它是相关的。 希望这可以帮助。

关于java - Soteria HttpMessageContext.setRegisterSession() 没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51678821/

相关文章:

linux - 写入用户在 session 期间执行它的所有语句

node.js - 使用expressjs/nodejs store session登录到redis

android - Facebook SDK : not "opened" session state while creating WebDialog. FeedDialogBu​​ilder

security - 是否应该保护带有登录表单的网页?

Python。需要确定连接是从本地机器建立的吗?

java - HornetQ JMS : Configure max-delivery-attempts in Java code

java - JEdi​​torPane 垂直对齐

C++专业代码分析工具

java - Android:在构建中包含外部 Jar(没有 Eclipse)

java - HQL 错误 : with-clause referenced two different from-clause elements