使用会话+ Redis持久性时无法获取主体/身份验证

时间:2019-06-21 06:41:49

标签: java redis micronaut

我一直在尝试遵循Micronaut Security SessionMicronaut Redis Session来使会话和安全性与Redis持久性保持一致。

如果禁用Redis持久性,则可以获取Principal对象,并且用户得到了正确的身份验证;但是,如果启用了Redis持久性,则可以看到用户已基于Redis数据进行了身份验证,但是我永远无法获得{{ 1}}对象,并且始终返回null

但是,当我启用Redis持久性时,我可以确认我仍然可以正确地创建并从Redis读取正确的Session对象(通过访问Principal端点,我可以看到身份验证和会话ID值)。我不确定自己在做什么错

这是我的/anon文件

application.yml

对于--- micronaut: application: name: hello-world security: enabled: true endpoints: login: enabled: true logout: enabled: true session: enabled: true login-success-target-url: / login-failure-target-url: /login/authFailed session: http: cookie-name: supahsexy cookie: true redis: enabled: true namespace: 'myapp:sessions' write-mode: BACKGROUND enable-keyspace-event: false value-serializer: io.micronaut.jackson.serialize.JacksonObjectSerializer --- redis: uri: redis://localhost

AuthenticationProviderUserPassword.java

最后是端点

@Singleton
public class AuthenticationProviderUserPassword implements AuthenticationProvider {
    @Override
    public Publisher<AuthenticationResponse> authenticate(AuthenticationRequest authenticationRequest) {
        if (authenticationRequest.getIdentity().equals("admin") && authenticationRequest.getSecret().equals("admin")) {
            var ud = new UserDetails((String) authenticationRequest.getIdentity(), List.of());
            return Flowable.just(ud);
        }
        return Flowable.just(new AuthenticationFailed());
    }
}

1 个答案:

答案 0 :(得分:2)