当我们网站开发到这里的时候,我们虽然已经实现了用户登录信息,用户不经过登录信息,比如:http://localhost:6941/UserInfo/Index如果我这样访问的话,他是可以进行操作的,所以我们就需要解决这样的问题.
这时候我们想到了Session,我们可以判断session是否为空,如果为空的话直接跳转到登录页面,负责才能进行操作。这样当我们在登录的时候我们就已经给session赋值
if (UserName != null) { Session["UserInfo"] = userInfo; }
首先想到了全局过滤器Filter,所有的控制器在执行之前都要经过全局过滤器过滤,但是这里有一个缺点就是登录的页面也会进过全局过滤器的过滤,所以这里使用全局过滤器不太好,这时候我们发现我们的控制器都继承自Controller,那么我们就想我们是不是需要重新一个基类继承自Controller,而让其他的控制其类继承自我们建立的基类,这样我们就新建一个基类BaseController类,然后让需要检测用户登录的页面继承自这个基类.
namespace LYZJ.UserLimitMVC.UI.Portal.Controllers { public class BaseController : Controller { //当前登录的用户属性 public BaseUser CurrentUserInfo { get; set; } //重新基类在Action执行之前的事情,在Action执行之前的一个方法 protected override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); //得到用户登录的信息 CurrentUserInfo = Session["UserInfo"] as BaseUser; //判断用户是否为空 if (CurrentUserInfo == null) { Response.Redirect("/Login/Index"); } } } }
最后让我们需要检测用户登录的控制其都继承自这个基类即可,这样我们就解决了这个需求,继承代码如下:
public class UserInfoController : BaseController