拦截器如果可以使用在我们上次的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面向切面编程的知识了,小伙伴们,自律起来!