网页用户登录权限校验的两种实现方式

    网页登录界面进行登录后,如果不进行登录校验,则在其它页面无法知道该用户是否进行了登录。故需要对用户的登录进行校验,这里将介绍两种登录校验的方式。分别为利用自定义行为过滤器进行登录校验,另外一种是构建控制器基类的校验实现子类的登录校验。具体实现如下:
这里以Session的方式进行用户登录信息存储为例进行两种方式的介绍:
  方式一:自定义行为过滤器校验:
第一步:在用户登录成功后,将用户信息添加到Session中:

        //对提交的用户名和密码进行验证
        public ActionResult ProcessLogin()
        {
            #region 验证码
            //1、验证验证码是否正确
            string inputNum = Request["vCode"];
            string sessionNum = Session["VNum"] as string;
            //校验完session后清空session
            Session["VNum"] = null;
            if (string.IsNullOrEmpty(sessionNum))
            {
                return Content("验证码输入错误!");
            }
            if (inputNum != sessionNum)
            {
                return Content("验证码输入错误!");
            }
            #endregion

            #region 登录验证
            string uid = Request["LoginCode"];
            string pwd = Request["LoginPwd"];
            short delNum=(short) DelFlagEnum.Normal;
            UserInfo users= service.GetEntities(u => u.UName == uid && u.Pwd == pwd && u.DelFlag == delNum).FirstOrDefault();
            if (users==null)
            {
                return Content("用户名或密码错误,请重新登录!");
            }

            Session["userLogin"] = users;   //将登录的用户信息存储到Session中
            return Content("OK");
            #endregion
        }


第二步:创建自定义行为过滤器类:LoginCheckFilterAttribute.cs具体代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MyOA.UI.Models
{
    public class LoginCheckFilterAttribute:ActionFilterAttribute
    {
        //为实现该过滤器的类提供设定值,以判定是否需要进行登录验证
        public bool isChecked { get; set; }
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
            if (isChecked)
            {
                // 校验用户是否登录,如果没有对应的Session存储登录对象,则表示没有进行登录,则直接将页面跳转到登录页面
                if (filterContext.HttpContext.Session["userLogin"] == null)
                {
                    filterContext.HttpContext.Response.Redirect("/UserLogin/Login");
                }
            }

        }
    }
}

第三步:对要进行登录验证的类或者方法添加上述自定义登录行为过滤器

using MyOA.UI.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MyOA.UI.Controllers
{
    public class HomeController : Controller
    {
        [LoginCheckFilter(isChecked=true)]
        public ActionResult Index()
        {
            return View();
        }
    }
}

利用自定义行为过滤器进行登录校验的主要步骤如上。如果某个类或者某个方法不需要实现登录校验,则将isCheck赋值为false即可。

方式二:建立控制器基类实现子类的登录校验
第一步:还是和上面的方法一样,将用户的登录信息存储到Session中;
第二步:构建基类控制器BaseController,并在基类控制器中实现登录校验:

using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MyOA.UI.Controllers
{
    public class BaseController : Controller
    {
        //实现其它地方对登录用户信息的快速调用
        public UserInfo userInfoLogin { get; set; }
        //设定判定是否需要进行登录校验的标志
        public bool isCheckLogin = true;
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
            if (isCheckLogin)
            {
                if (filterContext.HttpContext.Session["userLogin"] == null)
                {
                    filterContext.HttpContext.Response.Redirect("/UserLogin/Login");
                }
                else
                {
                    userInfoLogin = filterContext.HttpContext.Session["userLogin"] as UserInfo;
                }
            }
        }

    }
}

第三步:将需要进行登录校验的类继承自 BaseController基类控制器:

using MyOA.UI.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MyOA.UI.Controllers
{
    public class HomeController : BaseController
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}



### 回答1: 可以先实现一个简单的Filter,用来校验用户的登录状态和权限,具体的实现步骤如下:1. 实现一个Filter类,实现Filter接口,覆盖doFilter方法,在方法中实现用户登录校验权限校验的逻辑。2. 配置web.xml文件,配置Filter和要校验的URL,同时配置Filter的初始参数,如登录页面URL等。3. 创建一个Filter实例,并将其配置到web.xml文件中,完成Filter的配置。4. 启动服务器,Filter就会根据web.xml文件中的配置,实现用户登录校验权限校验的功能。 ### 回答2: 用户登录校验权限校验是Web应用开发中非常常见的功能之一。在Java Web应用中,可以使用原生Java编写Filter来实现这个功能。 Filter是Java Servlet规范提供的一种组件,可以对请求进行拦截和处理。下面是一个用原生Java编写的登录校验权限校验的Filter的示例: 首先,需要创建一个类来实现Filter接口,并重写其doFilter方法,该方法将在每一个请求被执行时被调用。在doFilter方法中,我们可以对请求进行相关的校验和处理。 ```java public class AuthenticationFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; // 进行用户登录校验 boolean isLoggedIn = checkUserLoggedIn(httpRequest); if (!isLoggedIn) { httpResponse.sendRedirect("/login"); // 未登录则跳转到登录页面 return; } // 进行权限校验 boolean hasPermission = checkUserPermission(httpRequest); if (!hasPermission) { httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "Access Denied"); // 没有权限则返回403错误 return; } chain.doFilter(request, response); // 放行请求 } // 校验用户是否已登录 private boolean checkUserLoggedIn(HttpServletRequest request) { // 实现具体的登录校验逻辑,比如判断Session中是否存在登录信息 // 返回一个boolean值表示是否已登录 } // 校验用户是否有权限访问资源 private boolean checkUserPermission(HttpServletRequest request) { // 实现具体的权限校验逻辑,比如判断用户角色是否具备访问权限 // 返回一个boolean值表示是否有权限 } } ``` 然后,在web.xml文件中配置该Filter,指定需要被该Filter拦截的URL模式: ```xml <filter> <filter-name>AuthenticationFilter</filter-name> <filter-class>com.example.AuthenticationFilter</filter-class> </filter> <filter-mapping> <filter-name>AuthenticationFilter</filter-name> <url-pattern>/*</url-pattern> // 拦截所有URL </filter-mapping> ``` 以上代码是一个简单的示例,实际应用中可能需要根据具体需求进行一些调整和优化。这个Filter可以在用户每次请求时拦截并进行用户登录校验权限校验,从而实现这两个功能的自动化处理。 ### 回答3: 要用原生Java写一个Filter实现用户登录校验权限校验,可以按照以下步骤进行实现: 1. 创建一个Java类,命名为LoginFilter,实现javax.servlet.Filter接口。 2. 在LoginFilter类中,实现doFilter方法,该方法接收三个参数:ServletRequest request, ServletResponse response, FilterChain chain。此方法会在每次请求前后被调用。 3. 在doFilter方法中,首先获取用户的登录信息,可以通过从request对象中获取session或者cookie等方式来获取。 4. 如果用户没有登录信息,则将请求重定向到登录页面,或者返回相应的错误提示,用于告知用户需要先登录才能访问页面。 5. 如果用户已经登录,则进一步校验用户的权限。可以通过获取用户的角色或者拥有的权限列表来进行校验。 6. 如果用户没有足够的权限,则同样将请求重定向到相应的错误页面,或者返回相应的错误提示。 7. 如果用户通过了登录权限校验,可以通过调用chain.doFilter(request, response)方法,继续执行其他Filter或者Servlet。 8. 最后,需要将LoginFilter类配置在web.xml文件中,以便让容器在每个请求过程中都能调用该过滤器。 通过以上步骤,我们就可以通过原生Java写一个Filter来实现用户登录校验权限校验。当用户请求一个需要登录权限的页面时,该Filter会进行相应的校验,并根据校验结果决定是否允许用户访问页面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值