springmvc框架学习 使用拦截器实现用户登录功能

本文介绍了如何在Spring MVC项目中使用拦截器进行登录验证,详细阐述了从controller到service再到dao层的用户登录流程,并展示了如何配置拦截器以阻止未登录用户访问特定页面。此外,还提及了login.jsp页面的表单设计及异常处理机制的学习计划。
摘要由CSDN通过智能技术生成

拦截器如果可以使用在我们上次的SSJ项目里,就会给项目增加一个登录功能,我们要明确一点:登录输入的用户名与密码肯定是要传到dao层与数据库查询的数据进行比对,如果有错误就通过异常机制将错误信息返回,正确就可正常访问我们的页面功能了。

  • 设计拦截器的第一个preHandle方法在请求处理之前登陆验证:
  • public class privilegeInterceptor implements HandlerInterceptor {
        @Override
    //    此方法在处理请求之前实现
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    //       判断用户是否登录?判断session里有没有user实例
            HttpSession session = request.getSession();
            User user = (User) session.getAttribute("user");
            if(user==null){
    //            空就是没有登陆或者登陆失败
                response.sendRedirect(request.getContextPath()+"/login.jsp");
                return false;
            }
    //        放行可以访问其他页面
            return true;
        }
    }
  • 同时在springmvc的xml文件里配置拦截器
  • <!--    配置权限拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
    <!--        配置对那些资源执行拦截-->
            <mvc:mapping path="/**"/>
    <!--        配置那些资源排除拦截,这个需要放出,不然登录页面都过不了,连登陆都看不到,那还用锤锤-->
            <mvc:exclude-mapping path="/user/login"/>
            <bean class="com.hlc.interceptor.privilegeInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
  • 接着我们需要在写好的项目框架里一步步的从controller层到service层再到daoc层传递user实例的验证,同时将login.jsp与controller层对应的方法api进行接合。
  • controller层方法:
  •   @RequestMapping("/login")
        public String login(String username, String password, HttpSession session){
            User user = userService.login(username,password);
            if(user!=null){
    //            登录成功
                session.setAttribute("user",user);
                return "redirect:/index.jsp";
            }
            return "redirect:/login.jsp ";
        }
  • service层方法:
  •  @Override
        public User login(String username, String password) {
    //        抓异常,抓的就是你是否返回了一个对应的user实例,没有就给controller层传一个null
            try {
                User user = userDao.login(username, password);
                return user;
            }catch (EmptyResultDataAccessException e){
                return null;
            }
        }
  • dao层的数据库访问方法:
  •     @Override
    //    这个异常就是当你输错或者不输的时候,抛出去在service层处理一下
        public User login(String username, String password)throws EmptyResultDataAccessException {
            User user = jdbcTemplate.queryForObject("select * from sys_user where username=? and password=? ", new BeanPropertyRowMapper<User>(User.class), username, password);
            return user ;
        }
  • 与其对应的login.jsp页面的表单代码:
  • <form action="${pageContext.request.contextPath}/user/login"
    				method="post">
    				<div class="form-group has-feedback">
    					<input type="text" name="username" class="form-control"
    						placeholder="用户名"> <span
    						class="glyphicon glyphicon-envelope form-control-feedback"></span>
    				</div>
    				<div class="form-group has-feedback">
    					<input type="password" name="password" class="form-control"
    						placeholder="密码"> <span
    						class="glyphicon glyphicon-lock form-control-feedback"></span>
    				</div>
    				<div class="row">
    					<div class="col-xs-8">
    						<div class="checkbox icheck">
    							<label><input type="checkbox"> 记住 下次自动登录</label>
    						</div>
    					</div>
    				
    					<div class="col-xs-4">
    						<button type="submit" class="btn btn-primary btn-block btn-flat">登录</button>
    					</div>
    			
    				</div>
    			</form>
    

表单效果:

 下午要开始springmvc的异常机制学习以及spring关于aop面向切面编程的知识了,小伙伴们,自律起来!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ForestSpringH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值