重定向某些页面并拒绝其他人访问?

时间:2016-01-07 10:43:31

标签: asp.net web-config asp.net-4.0

我正在使用表单身份验证。

在根web.config中有......

<authentication mode="Forms">
  <forms loginUrl="~/Auth/Login.aspx" timeout="2880" defaultUrl="~/Search.aspx" />
</authentication>

...所以,如果未经身份验证的用户被拒绝访问,请使用子文件夹的web.config中的以下条目...

<system.web>
  <authorization>
    <deny users="?"/>
  </authorization>
</system.web>

...然后未登录的用户被重定向到Login.aspx页面。

第一个问题

如果未经身份验证的用户请求某些(但不是全部)页面,或者请求来自一个子文件夹(但不是另一个)的文件,我想通过返回HTTP 403而不是将它们重定向(HTTP 302)来拒绝访问页。

我该怎么做?目前未经身份验证的用户总是被重定向到“登录”页面,而不是被拒绝访问。

第二个问题

我也使用'基于角色'的权限,例如我有一个名为Supervisors的角色。

访问某些文件夹仅适用于主管,因此这些文件夹具有类似

的Web配置
<system.web>
  <authorization>
    <allow roles="Supervisor"/>
    <deny users="*"/>
  </authorization>
</system.web>

如果没有Supervisor角色的经过身份验证的(已登录)用户尝试访问,则他们也会被重定向到“登录”页面(尽管他们已经登录)。

我可以以某种方式更改它(例如,返回HTTP 403,或重定向到其他故障页面)吗?

1 个答案:

答案 0 :(得分:0)

您必须通过创建将在Page_Init

上运行的过程手动执行此操作
private boolean isValidUser(String userName, String password) {
        if(sharedPreferences.getString("userName",null).equals(userName) && sharedPreferences.getString("password",null).equals(password))
            return true;
        else
            return false;
    }