我一直在尝试遵循Micronaut Security Session和Micronaut 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());
}
}