我最近实施了Elmah错误记录。我创建了一个SQL Server数据库,其中记录了错误,一切都很好。我一直在尝试保护Elmah,以便仅允许Admin
角色访问example.com/elmah
。现在任何人都可以访问它。
我已经浏览了几个SO帖子,以及其他在线博客,例如this,this和this,但我仍然无法解决我的问题。
这就是我目前在Web.Config
中设置Elmah的方式:
<appSettings>
<add key="elmah.mvc.disableHandler" value="false" />
<add key="elmah.mvc.disableHandleErrorFilter" value="false" />
<add key="elmah.mvc.requiresAuthentication" value="false" />
<add key="elmah.mvc.IgnoreDefaultRoute" value="false" />
<add key="elmah.mvc.allowedRoles" value="*" />
<add key="elmah.mvc.allowedUsers" value="*" />
<add key="elmah.mvc.route" value="elmah" />
<add key="elmah.mvc.UserAuthCaseSensitive" value="true" />
</appSettings>
<system.web>
<authentication mode="None" />
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>
</system.web>
<system.webServer>
<modules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
</modules>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
<elmah>
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah" applicationName="MyApplication"/>
<security allowRemoteAccess="yes" />
</elmah>
<location path="elmah.axd">
<system.web>
<httpHandlers>
<add verb="POST,GET,HEAD"
path="elmah.axd"
type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<authorization>
<allow roles="Admin"/>
<deny users="*" />
</authorization>
</system.web>
<system.webServer>
<handlers>
<add name="ELMAH"
verb="POST,GET,HEAD"
path="elmah.axd"
type="Elmah.ErrorLogPageFactory, Elmah"
preCondition="integratedMode" />
</handlers>
</system.webServer>
</location>
我试过玩它。以下是我迄今为止没有运气的尝试:
在<appSettings>
我尝试将value
更改为Admin
,就像这样<add key="elmah.mvc.allowedRoles" value="Admin" />
,然后我注释掉下一行(allowUsers
)。那没用。
在<authorization>
我尝试将其更改为此以查看它是否至少会拒绝所有人,但这不起作用:
<authorization>
<deny users="*" />
</authorization>
然后我尝试将<allow roles="Admin"/>
更改为<allow users="admin">
,但这也无效。 Admin
角色存在,admin
用户也存在。
在找到解决方法之前,我刚刚将<security allowRemoteAccess="yes" />
设置为<security allowRemoteAccess="no" />
很抱歉这篇长篇文章,我只是想确保所有内容都包含在内。
我很感激将此锁定的所有帮助。 :)