Spring.Net在ASP.NET MVC的过滤器Controller中无效

在ASP.NET MVC中使用Spring.Net 参考:ASP.NET MVC Spring.NET 整合


在ASP.NET MVC中写了一个FilterController,override OnActionExecuting()方法,于是可以借助session实现单点登录  但是使用Spring.Net实现依赖注入却一直为null。


    public class FilterController : Controller
    {
        //在这里不能使用Spring.Net的依赖注入 为什么?        
        IUserService userService = new BLL.UserService();
        IBLL.IAuthorityService authService = new BLL.AuthorityService();

        //过滤器不能使用Spring.Net的依赖注入
        //比如访问SettingController,访问Action之前会进入FilterController  但是这是MVC框架内部执行的
        //其实还是在访问Setting/Index,所以Spring.Net不会生成Filter控制器下的属性
        //public IUserService userService { get; set; }
        //public IBLL.IAuthorityService authService { get; set; }

        //在调用操作方法前执行
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //没有session的情况
            if (!hasSession())
            {
                //没有Session检查cookie
                if (Request.Cookies["cp1"] != null && Request.Cookies["cp2"] != null)
                {
                    string cookieNameValue = Request.Cookies["cp1"].Value;
                    string cookiePwdValue = Request.Cookies["cp2"].Value;
                    var model = userService.LoadEntities(c => c.LoginName == cookieNameValue).FirstOrDefault();
                    if (model != null)
                    {
                        if (cookiePwdValue == ControllersCommon.ControllersCommon.GetPwdMd5(model.LoginPwd))//注意,注册时将密码加密以后保存到数据库。
                        {
                            //Session为空,而cookie不为空 需要给Session赋值
                            SaveToSession(model);
                            return;
                        }
                    }
                    else
                    {
                        //删除Cookie.
                        DeleteCookies();
                    }
                }
                else//cookie不存在
                {
                    //什么也不用做
                }
                //用户没有登录 session没有 也没有缓存 记录跳转页  进行过滤操作                
                ControllersCommon.ControllersCommon.GoPageUrl();
            }
            //有session 在session规定的过期时间之内,任意转跳
            else
            {
                //不进行过滤
                //进行权限检查
                if (!CheckAuthority())
                {
                    filterContext.HttpContext.Response.Redirect("/Error/NoAuthority/Index");
                }
            }
        }
}

原因就是

        //过滤器不能使用Spring.Net的依赖注入
        //比如访问SettingController,访问Action之前会进入FilterController  但是这是MVC框架内部执行的
        //其实还是在访问Setting/Index,所以Spring.Net不会生成Filter控制器下的属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值