0

当我尝试进行安全操作时,我的 MVC 站点出现问题,我从 AD 获取组列表,将它们与用户进行比较,然后尝试创建一个自定义安全对象,然后将其保存到Session.

然后,这Session意味着确定用户是否可以查看页面。它在我的本地开发环境中运行良好,但在我的测试系统(单独的框)中它不起作用并且我得到拒绝访问(如果用户不是特定组的成员,则如预期的那样)。

该代码不会引发任何错误,但是当我尝试为我的SECURITY_ACCESS对象检索会话时,它似乎没有找到任何东西。

为了检查会话是否实际上是临时填充的,是否有可能将会话的全部内容转储到页面?

在我View的 AccessDenied 控制器中,我有以下内容,但是虽然它说 Session 中有一个对象,但它实际上并没有输出它。

@foreach (string item in Session.Keys)
{
<tr>
<td>
<strong>Session: </strong>@Html.DisplayFor(m => item))
</td>
</tr>
}

我开始解决这个问题,因为我不明白为什么它在测试中不起作用。

4

1 回答 1

0

我强烈建议您不要将安全组件放在会话中。我还鼓励您不要推出自己的授权系统。相反,请使用 MVC 中内置的安全组件。组件的概述在这里:http ://www.asp.net/mvc/overview/security 。内置AuthorizeAttribute可与 Windows Auth 一起使用以指定应有权访问页面的 AD 组,如下所述:http: //msdn.microsoft.com/en-us/library/gg703322(v=vs.98) .aspx

回答你的问题:

令人讨厌的HttpSessionState难以使用;我希望它只是实施IDictionary<string,object>。无论如何,这是一种将会话转储到页面的有点冗长的方法。

@{
    var sessionItems = Session.Keys.OfType<string>().ToDictionary (k => k, k => session[k]);    
    var json = Newtonsoft.Json.JsonConvert.SerializeObject(sessionItems, Newtonsoft.Json.Formatting.Indented);
}
<pre>
    @Html.Raw(json);
</pre>
于 2013-08-20T10:04:25.133 回答