自定义IIdentity或IPrincipal或其他

时间:2012-05-26 19:24:24

标签: asp.net asp.net-mvc

我发现在我正在使用的当前应用程序中,我正在几乎每个控制器中检索几个实体(与经过身份验证的用户帐户相关)。这些实体缓存在orm层,但似乎这些实体在验证时加载一次并向应用程序自定义IPrincipal对象添加一些属性是一个很好的候选者。

我想到的另一个选择是创建一个自定义上下文对象(与用户相关的帐户对象)并使用当前请求传递它。

两种方法的优点/缺点?还有另一种方法可以处理像这样的常用对象吗?

1 个答案:

答案 0 :(得分:1)

听起来你错过了每次请求都会重新创建IPrincipal / IIdentity实例的事实。如果你没有以明确的方式坚持它,它就不会持久存在。

我认为持有数据的自定义主类与缓存的环境属性之间存在性能差异。

另一方面,自定义身份验证类的缺点是您必须提供自定义身份验证模块,以便在处理管道中的AuthenticateRequest事件期间重新创建这些实例。换句话说,您必须将FormsAuthenticationModule替换为您自己的。这并不难,但如果不是绝对必要,我不会这样做。

另请注意,某些数据可以保留在表单cookie的UserData部分中。这意味着只要cookie有效并且只创建一次就可以拥有它。