Soteria HttpMessageContext.setRegisterSession()工作不正常?

影人 :

我实现了自定义HttpAuthenticationMechanism子类使用提供认证Soteria / Java EE的安全框架。我已经得到了验证的工作就好了。不过,我注意到,当我打电话HttpMessageContext.setRegisterSession(String, Set<String>)创建Java EE Session,行为是不是我所期望的那样。我期待的是经过认证的身份与网络相关的Session,和我AuthenticationMechanismvalidateRequest(HttpServletRequest req, HttpServletResponse res, HttpMessageContext ctx)方法不会对后续请求中调用。我所观察,但是,是validateRequest()被称为在每次请求,即使用户已经成功验证。

我能得到我想要使用的行为@AutoApplySession在我的注解AuthenticationMechanism类,但这不是我想要的行为。我想选择是否要根据凭证提供的类型创建一个会话。

是我的理解setRegisterSession()方法不正确?或者,这是内Soteria的错误吗?

朱利叶斯Zaldokas:

@AutoApplySession在Soteria(做到这一点的新途径JSR 375)。如果它不适合您的需要(如您需要可以记住基于一些其他凭证信息相同的HTTP会话中的所有请求认证的身份或重新认证),validateRequest方法仍然会被调用,不管你是否叫HttpMessageContext' š setRegisterSession方法或没有。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; 
}

另外,看到这个答案由阿尔扬Tijms。虽然它是关于JASPIC不Soteria,但在这种情况下,我认为这是相关的。希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章