赞
踩
- package cn.edu.hpu.ssm.interceptor;
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- import org.springframework.web.servlet.HandlerInterceptor;
- import org.springframework.web.servlet.ModelAndView;
-
- //测试拦截器1
- public class HandlerInterceptor1 implements HandlerInterceptor{
-
-
- //执行Handler方法之前执行
- //用于身份认证、身份授权
- //比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
- Object handler) throws Exception {
-
-
- //return false表示拦截,不向下执行
- //return true表示放行
- return false;
- }
-
- //进入Handler方法之后,返回modelAndView之前执行
- //应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里
- //传到视图,也可以在这里统一指定视图
- @Override
- public void postHandle(HttpServletRequest request, HttpServletResponse response,
- Object handler, ModelAndView modelAndView) throws Exception {
-
-
- }
-
- //执行Handler完成执行此方法
- //应用场景:统一异常处理,统一日志处理
- @Override
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
- Object handler, Exception ex)
- throws Exception {
-
-
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
- <bean
- class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
- <property name="interceptors">
- <list>
- <ref bean="handlerInterceptor1"/>
- <ref bean="handlerInterceptor2"/>
- </list>
- </property>
- </bean>
- <bean id="handlerInterceptor1" class="springmvc.intercapter.HandlerInterceptor1"/>
- <bean id="handlerInterceptor2" class="springmvc.intercapter.HandlerInterceptor2"/>
一般不推荐使用。
- <!-- 拦截器 -->
- <mvc:interceptors>
- <!-- 多个拦截器,顺序执行 -->
- <mvc:interceptor>
- <!-- /**表示所有url包括子url路径 -->
- <mvc:mapping path="/**"/>
- <bean class="cn.edu.hpu.ssm.interceptor.HandlerInterceptor1"/>
- </mvc:interceptor>
- <mvc:interceptor>
- <mvc:mapping path="/**"/>
- <bean class="cn.edu.hpu.ssm.interceptor.HandlerInterceptor2"/>
- </mvc:interceptor>
- </mvc:interceptors>
- package cn.edu.hpu.ssm.interceptor;
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- import org.springframework.web.servlet.HandlerInterceptor;
- import org.springframework.web.servlet.ModelAndView;
-
- //测试拦截器1
- public class HandlerInterceptor1 implements HandlerInterceptor{
-
-
- //执行Handler方法之前执行
- //用于身份认证、身份授权
- //比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
- Object handler) throws Exception {
-
- System.out.println("HandlerInterceptor1......preHandle");
-
- //return false表示拦截,不向下执行
- //return true表示放行
- return false;
- }
-
- //进入Handler方法之后,返回modelAndView之前执行
- //应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里
- //传到视图,也可以在这里统一指定视图
- @Override
- public void postHandle(HttpServletRequest request, HttpServletResponse response,
- Object handler, ModelAndView modelAndView) throws Exception {
-
- System.out.println("HandlerInterceptor1......postHandle");
-
- }
-
- //执行Handler完成执行此方法
- //应用场景:统一异常处理,统一日志处理
- @Override
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
- Object handler, Exception ex)
- throws Exception {
-
- System.out.println("HandlerInterceptor1......afterHandle");
-
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
- package cn.edu.hpu.ssm.interceptor;
-
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
-
- import org.springframework.web.servlet.HandlerInterceptor;
- import org.springframework.web.servlet.ModelAndView;
-
-
- //测试拦截器2
- public class HandlerInterceptor2 implements HandlerInterceptor{
-
-
- //执行Handler方法之前执行
- //用于身份认证、身份授权
- //比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
- Object handler) throws Exception {
-
- System.out.println("HandlerInterceptor2......preHandle");
-
- //return false表示拦截,不向下执行
- //return true表示放行
- return false;
- }
-
- //进入Handler方法之后,返回modelAndView之前执行
- //应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里
- //传到视图,也可以在这里统一指定视图
- @Override
- public void postHandle(HttpServletRequest request, HttpServletResponse response,
- Object handler, ModelAndView modelAndView) throws Exception {
-
- System.out.println("HandlerInterceptor2......postHandle");
-
- }
-
- //执行Handler完成执行此方法
- //应用场景:统一异常处理,统一日志处理
- @Override
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
- Object handler, Exception ex)
- throws Exception {
-
- System.out.println("HandlerInterceptor2......afterHandle");
-
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
HandlerInterceptor1...preHandle
HandlerInterceptor2...preHandle
HandlerInterceptor2...postHandle
HandlerInterceptor1...postHandle
HandlerInterceptor2...afterCompletion
HandlerInterceptor1...afterCompletion
HandlerInterceptor1...preHandle
HandlerInterceptor2...preHandle
HandlerInterceptor1...afterCompletion
HandlerInterceptor1...preHandle
- package cn.edu.hpu.ssm.controller;
-
- import javax.servlet.http.HttpSession;
-
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- @Controller
- public class LoginController {
-
- //登录
- @RequestMapping("/login")
- public String login(HttpSession session,String username,String password)throws Exception{
- //调用serivce进行用户身份验证
- //...
-
- //在session中保存用户身份信息
- session.setAttribute("username", username);
- //重定向到商品列表界面
- return "redirect:/items/queryItems.action";
- }
-
- //退出
- @RequestMapping("/logout")
- public String logout(HttpSession session)throws Exception{
-
- //清除session
- session.invalidate();
-
- //重定向到商品列表界面
- return "redirect:items/queryItems.action";
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
- <%@ 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>
-
-
- </head>
-
- <body>
- <form action="${pageContext.request.contextPath }/login.action" method="post">
- 用户账号:<input type="text" name="username"/><br/>
- 用户密码:<input type="password" name="password"/><br/>
- <input type="submit" value="登录"/>
- </form>
- </body>
- </html>
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
- 当前用户:${username }|
- <c:if test="${username!=null }">
- <a href="${pageContext.request.contextPath }/logout.action">退出</a>
- </c:if>
- package cn.edu.hpu.ssm.interceptor;
-
- 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;
-
- //登录认证的拦截器
- public class LoginInterceptor implements HandlerInterceptor{
-
- //执行Handler方法之前执行
- //用于身份认证、身份授权
- //比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
- Object handler) throws Exception {
-
- //获取请求的url
- String url=request.getRequestURI();
- //判断url是否是公开地址(实际使用时将公开地址配置到配置文件中)
- if(url.indexOf("login.action")>=0){
- //如果要进行登录提交,放行
- return true;
- }
-
- //判断session
- HttpSession session=request.getSession();
- //从session中取出用户份信息
- String username=(String)session.getAttribute("username");
-
- if(username!=null){
- //身份存在,放行
- return true;
- }
-
- //执行这里表示用户身份需要验证,跳转到登录界面
- request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
-
- //return false表示拦截,不向下执行
- //return true表示放行
- return false;
- }
-
- //进入Handler方法之后,返回modelAndView之前执行
- //应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里
- //传到视图,也可以在这里统一指定视图
- @Override
- public void postHandle(HttpServletRequest request, HttpServletResponse response,
- Object handler, ModelAndView modelAndView) throws Exception {
-
- System.out.println("HandlerInterceptor1......postHandle");
-
- }
-
- //执行Handler完成执行此方法
- //应用场景:统一异常处理,统一日志处理
- @Override
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
- Object handler, Exception ex)
- throws Exception {
-
- System.out.println("HandlerInterceptor1......afterHandle");
-
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
- <!-- 拦截器 -->
- <mvc:interceptors>
- <!-- 多个拦截器,顺序执行 -->
- <!-- 登录认证拦截器 -->
- <mvc:interceptor>
- <mvc:mapping path="/**"/>
- <bean class="cn.edu.hpu.ssm.interceptor.LoginInterceptor"/>
- </mvc:interceptor>
- </mvc:interceptors>
我们输入账号(王五)密码(随便),发现登录进去,并且看到了用户名
点击退出再次退回登录界面,再次输入商品列表的网址,结果发现依旧被拦截在登录界面,原因是session已经被清除。
转载请注明出处:http://blog.csdn.net/acmman/article/details/47680517
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。