我希望最终用户可以访问该应用程序,而不管LoadBalancer重定向到哪个服务器节点。 因此,我想使用OrmLiteCacheClient将会话存储在MSSQL DB中。
我有以下代码(只有SetupPlugins的一部分):
private void SetupPlugins (Container container)
{
//Register OrmLite Db Factory if not already
container.Register<IDbConnectionFactory>(c =>
new OrmLiteConnectionFactory(connString, SqlServerDialect.Provider));
container.RegisterAs<OrmLiteCacheClient, ICacheClient>();
//Create 'CacheEntry' RDBMS table if it doesn't exist already
container.Resolve<ICacheClient>().InitSchema();
container.Register<IAuthRepository>(c =>
new OrmLiteAuthRepository(c.Resolve<IDbConnectionFactory>()));
container.Resolve<IAuthRepository>().InitSchema();
Plugins.Add(new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] {
new AdGroupAuthProvider(container.Resolve<IActiveDirectoryAuthHelper>(),
GlobalConfiguration.Instance.AllowedActiveDirectoryGroup)
}));
}
internal class AdGroupAuthProvider : BasicAuthProvider
{
private readonly IActiveDirectoryAuthHelper _adLoggingHelper;
private readonly string _loggedUserAdGroup;
public AdGroupAuthProvider(IActiveDirectoryAuthHelper loggingHelper, string loggedUserAdGroup)
{
_adLoggingHelper = loggingHelper;
_loggedUserAdGroup = loggedUserAdGroup;
}
public override bool Authenticate(IServiceBase loggingServiceBase, string userName, string password)
{
return _adLoggingHelper.HasUserAssignedGroup(userName, password, _loggedUserAdGroup);
}
}
}
如何使AdGroupAuthProvider与OrmLiteCacheClient一起使用? 以上程序已构建,我可以进行身份验证。 但是,CacheEntry MSSQL表为空。
答案 0 :(得分:0)
ServiceStack使用ICacheClient
将User Sessions存储在普通session-based Auth Providers中,尽管它不会将会话持久化到IAuthWithRequest Providers中的缓存。
我对AdGroupAuthProvider
不熟悉,但是如果它实现了IAuthWithRequest
,则该请求将包含每个请求的身份验证,该身份验证是用来填充仅附加到请求且不持久保存在{ {1}}。