1.拦截器

SpringMvc中的拦截器实现了HandlerInterceptor接口,通常使用与身份认证,授权和校验,模板视图,统一处理等;

public class HanderInterceptor1 implements HandlerInterceptor {@Overridepublic void afterCompletion(HttpServletRequest arg0,HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {}@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2, ModelAndView arg3) throws Exception {}@Overridepublic boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2) throws Exception {return true;}
}

在拦截器中中有三个方法 :

preHandler :在进入Handler方法之前执行了,使用于身份认证,身份授权,登陆校验等,比如身份认证,用户没有登陆,拦截不再向下执行,返回值为 false ,即可实现拦截;否则,返回true时,拦截不进行执行;

postHandler : 进入Handler方法之后,返回ModelAndView之前执行,使用场景从ModelAndView参数出发,比如,将公用的模型数据在这里传入到视图,也可以统一指定显示的视图等;

afterHandler : 在执行Handler完成后执行此方法,使用于统一的异常处理,统一的日志处理等;

2.拦截器的配置

拦截器的配置有两种方式实现 :

(1)针对某个handlermapping (controller)的 配置

Springmvc拦截器针对某个controller进行拦截设置,如果在某个HandlerMapping中配置拦截,经过该HandlerMapping映射成功的handler最终使用该拦截器;

(2)类似全局的配置

可以配置类似全局的拦截器,springmvc框架将配置的类似全局拦截器注入到每个Handlermapping中;

配置实现 :

    <!-- 配置拦截器 --><mvc:interceptors><!-- 多个拦截器,顺序执行 --><mvc:interceptor><!-- /** 表示所有的url,包括子url路径 --><mvc:mapping path="/**"/><bean class="cn.labelnet.ssm.filter.HanderInterceptor1"></bean></mvc:interceptor><!-- 配置登陆拦截器 --><mvc:interceptor><mvc:mapping path="/**"/><bean class="cn.labelnet.ssm.filter.LoginHandlerIntercepter"></bean></mvc:interceptor><!-- .....--></mvc:interceptors>

(3)在一个工程中,可以配置多个拦截器,使用多个拦截器,则要注意的是 :

多个拦截器使用的时候,preHandler是顺序执行的,而postHandler和afterHandler是倒序执行的;

所以 :

如果统一日志处理器拦截器,需要改拦截器prehandler一定要返回true,且将它放在拦截器配置的第一个位置;

如果登陆认证拦截器,放在拦截器的配置中的第一个位置(有日志处理的话,放在日志处理下面);

如果有权限校验拦截器,则放在登陆拦截器之后,因为登陆通过后,才可以进行校验权限;

3.示例:

场景描述 :用户点击查看的时候,我们进行登陆拦截器操作,判断用户是否登陆? 登陆,则不拦截,没登陆,则转到登陆界面;

图示 :

3.1 controller 登陆业务实现

 @RequestMapping("/clientLogin")public String clientLogin(HttpSession httpSession,String username,String password){if(username.equals("yuan")&&password.equals("123456")){//登陆成功httpSession.setAttribute("username",username);return "forward:clientsList.action";}else{//登陆失败return "forward:login.jsp";}}

3.2 controller 登出业务实现

@RequestMapping("/clientLoginOut")public String clientLoginOut(HttpSession httpSession){httpSession.invalidate();return "forward:clientsList.action";}

3.3 拦截器实现

在这里实现用户拦截实现是:通过判断是否是编辑查看的页面,如果是,判断session中的用户名存在不存在,就可以了;

package cn.labelnet.ssm.filter;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;/*** 登陆拦截器* 场景:用户点击查看的时候,我们进行登陆拦截器操作,判断用户是否登陆?* 登陆,则不拦截,没登陆,则转到登陆界面;* TODO* 作者:原明卓* 时间:2016年1月8日 下午3:25:35* 工程:SpringMvcMybatis1Demo*/
public class LoginHandlerIntercepter implements HandlerInterceptor {@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object arg2, Exception arg3)throws Exception {}@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2, ModelAndView arg3) throws Exception {}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse arg1,Object arg2) throws Exception {String requestURI = request.getRequestURI();if(requestURI.indexOf("editClientIfo.action")>0){//说明处在编辑的页面HttpSession session = request.getSession();String username = (String) session.getAttribute("username");if(username!=null){//登陆成功的用户return true;}else{//没有登陆,转向登陆界面request.getRequestDispatcher("/login.jsp").forward(request,arg1);return false;}}else{return true;}}}

3.4 拦截器配置实现

    <!-- 配置拦截器 --><mvc:interceptors><!-- 多个拦截器,顺序执行 --><mvc:interceptor><!-- /** 表示所有的url,包括子url路径 --><mvc:mapping path="/**"/><bean class="cn.labelnet.ssm.filter.HanderInterceptor1"></bean></mvc:interceptor><!-- 配置登陆拦截器 --><mvc:interceptor><mvc:mapping path="/**"/><bean class="cn.labelnet.ssm.filter.LoginHandlerIntercepter"></bean></mvc:interceptor><!-- .....--></mvc:interceptors>

3.5 登陆页面实现

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>用户登陆</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><form action="${pageContext.request.contextPath }/clients/clientLogin.action" method="post">姓名:<input type="text" name="username"> <br><br>密码:   <input type="text" name="password"> <br><br><input type="submit" value="登陆"></form></body>
</html>

3.6 列表信息页面

<body><h1>客户信息管理 <br><c:if test="${username!=null }">${username}<a href="${pageContext.request.contextPath}/clients/clientLoginOut.action">退出</a></c:if></h1><form method="post"  action=""  style="margin-top: 10px;float: left;margin-left: 5%;"><input id="search"  type="text" ><input  value="查询" type="submit"></form><table width="90%" border="1" align="center"><thead><tr><td colspan="10"  align="center">  客户信息管理</td></tr>      </thead><tbody><tr align="center"><td>编号</td><td>姓名</td><td>代码</td><td>生日</td><td>家庭住址</td><td>现居住地</td><td>联系方式</td><td>紧急联系方式</td><td>注册日期</td><td>操作</td></tr><c:forEach items="${clients}" var="c"><tr><td>  ${c.id}  </td><td> ${c.username} </td><td> ${c.client_certificate_no} </td><td> ${c.born_date} </td><td> ${c.family_register_address} </td><td> ${c.now_address} </td><td> ${c.contact_mode} </td><td> ${c.urgency_contact_mode} </td><td> ${c.create_date} </td><td><a href="${pageContext.request.contextPath}/clients/editClientIfo.action?id=${c.id}">查看</a></td></tr></c:forEach></tbody></table></body>

4.Demo免积分下载

http://download.csdn.net/detail/lablenet/9396235

Spring MVC - 拦截器实现 和 用户登陆例子相关推荐

  1. Spring MVC拦截器~~~登陆验证拦截

    [ 30 分 钟 轻 松 入 门 Spring MVC][web 三 大 组 件 之 ~ ~ Filter 过 滤 器] Interceptor 拦截器学习: 1.了解spring mvc拦截器的概念 ...

  2. 使用session监听+spring MVC拦截器禁止用户重复登录

    在许多web项目中,需要禁止用户重复登录.一般来说有两种做法: 一是在用户表中维护一个字段isOnLine(是否在线),用户登录时,设定值为true,用户退出时设定为false,在重复登录时,检索到该 ...

  3. spring mvc 拦截器拦截jsp页面

    spring mvc 拦截器怎么拦截jsp页面 你这个 是拦截带 /jsp 的 .do请求 解决方案 用spring 的拦截器 去拦截 所有的 .do 请求, 然后写一个 过滤器去拦截 所有的.jsp ...

  4. spring mvc拦截器_Spring MVC拦截器示例

    spring mvc拦截器 我认为现在是时候看看Spring的MVC拦截器机制了,这种机制已经存在了很多年,并且是一个非常有用的工具. Spring Interceptor会按照提示说:在传入的HTT ...

  5. 拦截器实现网页用户登陆

    拦截器实现网页用户登陆 实现思路 1.有一个登陆页面,需要写一个controller访问页面. 2. 登陆页面有一提交表单的动作.需要在controller中处理.判断用户名密码是否正确.如果正确,向 ...

  6. 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor

    [Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...

  7. Java Spring MVC框架 VIII 之 Spring MVC拦截器

    Java Spring MVC框架 VIII 之 Spring MVC拦截器 Spring MVC拦截器 1.拦截器简介 拦截器是SpringMvc框架提供的功能 它可以在控制器方法运行之前或运行之后 ...

  8. Spring MVC拦截器示例

    我以为是时候看看Spring的MVC拦截器机制了,这种机制已经存在了很多年,并且是一个非常有用的工具. Spring Interceptor会按照提示进行操作:在传入的HTTP请求到达您的Spring ...

  9. Spring MVC拦截器

    1.如何实现登录权限检查 使用session进行约定值的检查 实现方法: (1)使用Filter (2)使用Spring的拦截器 拦截器组件简介:Spring MVC特有组件,可以在调用Control ...

  10. Spring MVC拦截器实现用户登录权限验证案例

    本节将通过拦截器来完成一个用户登录权限验证的 Web 应用 springMVCDemo07,具体要求如下:只有成功登录的用户才能访问系统的主页面main.jsp,如果没有成功登录而直接访问主页面,则拦 ...

最新文章

  1. STM32 电机教程 17 - 基于ST MotorControl Workbench的电机调试
  2. Android studio | From Zero To One ——简单布局(View和LinearLayout)
  3. 工作293:新的打印操作
  4. C# .net防止一个程序(WinForm)重复运行的方法。
  5. UI-148xLE-M相机参数
  6. 操作系统-io控制器
  7. 计算机病毒及解决方法,3种电脑病毒及解决方法
  8. 【校内模拟】五彩斑斓(拓扑排序)
  9. qiankun 2.x 运行时沙箱 源码分析
  10. 使用PyTorch Lightning自动训练你的深度神经网络
  11. 华为RH2288H V3服务器 从拆箱开始安装系统
  12. AlexNet论文阅读总结及代码
  13. c语言调幅度程序,广播监测设备入网技术要求及测量方法(DOC 72页).doc
  14. 微信小程序如何接入微信支付
  15. 计算机视觉工程师装机软件一览
  16. 超级表格教你怎样“零”成本制作签到系统
  17. 什么是JPA(Java persistence API)?
  18. allegro 对齐元器件_Allegro怎么对元器件进行对齐
  19. 暨大 c语言复试 2015,暨南大学历年复试真题合集.pdf
  20. 让前端的子弹飞-TypeScript

热门文章

  1. 傲腾机器Linux,【收藏】傲腾装机必看!
  2. VB2010实例(2) _滚动字幕
  3. html读取在线文件,javascript中如何读取文件?
  4. EdrawMax 11 for mac(亿图图示)中文版
  5. 顺序栈基本操作的C语言实现(含全部代码实现)--- 数据结构之顺序栈
  6. 土壤类型空间分布数据介绍
  7. 实施运维企业面试题-5
  8. 计算机辅助设计学什么,计算机辅助设计课程教学大纲
  9. NVIDIA英伟达控制面板点击没反应解决方案
  10. 霍常亮淘宝客教你开发app第10节:搭建uni-app开发环境Hbuilder