SpringMVC(24) —— 拦截器实现登陆判断验证


1.需求分析

  • 要实现登陆判断功能,我们至少要有一个登陆页和登陆成功的页面
  • 登陆的实现逻辑是用户输入用户名,前端使用ajax去把用户表中对应用户名的用户的信息全部查询出来,存在session中,当用户点击提交表单的时候就将用户输入的密码和session中的user对象的pwd属性值进行对比,相同就跳转登陆成功的页面,不同就跳转回登陆页面并提示用户密码错误
    • 但是这里为了简单,我们就将用户名和密码写死在后台,用户提交数据的时候直接判断,所以也就不使用ajax来做异步查询数据了
  • 登陆判断的拦截器的作用为当用户处于未登录状态的时候,不让用户访问登陆成功的页面,并将其重定向回登陆页面

2.代码实现

  • 编写3个页面实现登陆验证功能
    • index.jsp:用于跳转页面
    • logon.jsp:用于用户登陆
    • main.jsp:用户登陆之后才能进入的页面
  • 之所以加一个index.jsp是因为现在的页面都不是进来就叫你登陆,然后才能使用的,而是将登陆作为一个连接放在页面上,你想登陆的时候就点击跳转登陆页面即可
    在这里插入图片描述
  • 编写一个controller来控制视图跳转和判断用户名和密码是否正确,并将用户数据存入session中
        //3、判断用户名和密码是否正确
        @RequestMapping("/login")
        public String login(String name, String pwd, HttpSession session){
            System.out.println("===>进入了判断");
            if ("admin".equals(name)){
                if ("123".equals(pwd)){
                    System.out.println("===>通过了判断");
                    session.setAttribute("user",name);
                    return "main";
                }
            }
            return "logon";
        }
    
  • 但是现在的问题是用户不走登陆页面,可以直接请求到登陆后才能看到的首页main.jsp,这个时候我们就需要使用我们的拦截器了,因为拦截器会拦截请求controller中方法的请求,所以用户在直接请求main.jsp的时候就会被拦截器拦截下来
        //3、判断用户名和密码是否正确
        @RequestMapping("/login")
        public String login(String name, String pwd, HttpSession session, Model model){
            System.out.println("===>进入了判断");
            if ("admin".equals(name)){
                if ("123".equals(pwd)){
                    System.out.println("===>通过了判断");
                    session.setAttribute("username",name);
                    model.addAttribute("info",name);
                    return "main";
                }
            }
            model.addAttribute("info","账号或密码错误");
            return "logon";
        }
    
  • 再添加一个注销功能
        //4、注销功能
        @RequestMapping("logout")
        public String logout(HttpSession session){
            session.removeAttribute("username");
            return "logon";
        }
    

3.测试

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
    测试完成!

    注意:上面的视图跳转都是基于转发实现的,这是因为springMVC的视图跳转默认就是转发,如果要重定向,我们需要显示的在视图名称前面加一个"redirect:",但是注意:重定向不能访问web-inf文件夹下的资源(参考: SpringMVC(7) —— 结果跳转方式.)


4.小结

  • 之所以springmvc要搞一个拦截器,其实就是想要减少我们使用servlet容器,而尽可能地将所有的配置都集中在spring容器中进行配置,这样可以实现使用spring容器对项目要用的组件进行统一的管理,也方便spring容器进行DI
  • 而spring容器和servlet容器之间的联系是通过DispatcherServlet进行联系的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值