Spring MVC 拦截器 (十)
完整的项目案例: springmvc.zip
目录

实例
除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式)
<!--json-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency> 项目结构:

配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"> <!-- 请求总控器 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dispatcher-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> </web-app>
配置dispatcher-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="edu.nf.ch10"/> <mvc:annotation-driven/> <mvc:default-servlet-handler/> <!-- 配置拦截器栈 -->
<mvc:interceptors>
<!-- 可以配置多个<mvc:interceptor>表示多个拦截器 -->
<mvc:interceptor>
<!-- 哪些请求映射到拦截器中 -->
<mvc:mapping path="/**"/>
<!-- 排除那些请求不经过拦截器-->
<mvc:exclude-mapping path="/login.html"/>
<mvc:exclude-mapping path="/userLogin"/>
<mvc:exclude-mapping path="/js/**"/>
<!-- 配置拦截器的bean-->
<bean class="edu.nf.ch10.interceptors.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean> </beans>
请求控制器UserController:
package edu.nf.ch10.controller; import edu.nf.ch10.controller.vo.ResponseVO;
import edu.nf.ch10.entity.Users;
import edu.nf.ch10.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpSession; /**
* @author wangl
* @date 2018/11/5
*/
@Controller
public class UserController { @Autowired
private UserService userService; @PostMapping("/userLogin")
public @ResponseBody ResponseVO login(Users user, HttpSession session){
user = userService.login(user);
//只有当会话作用域存在用户信息才表示正常登陆
session.setAttribute("user", user);
ResponseVO vo = new ResponseVO();
vo.setValue("index.html");
return vo;
}
}
异常处理类ControllerAdviceHandler:
package edu.nf.ch10.controller.advice; import edu.nf.ch10.controller.vo.ResponseVO;
import edu.nf.ch10.service.exception.UserException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody; /**
* @author wangl
* @date 2018/11/5
* 定义一个全局的异常处理类(类似一个切面)
* 这个类中定义的所有方法都是异常处理方法,
* 也可以理解为是全局的异常通知
* value属性指定对哪些控制器进行切入拦截
*/
@ControllerAdvice("edu.nf.ch10.controller")
public class ControllerAdviceHandler { @ExceptionHandler(UserException.class)
public @ResponseBody ResponseVO loginExceptionHandle(UserException e){
ResponseVO vo = new ResponseVO();
vo.setCode(HttpStatus.UNAUTHORIZED.value());
vo.setMessage(e.getMessage());
return vo;
}
}
登录拦截器 LoginInterceptor
package edu.nf.ch10.interceptors; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; /**
* @author wangl
* @date 2018/11/5
* 登陆拦截器
* 拦截器必须实现Spring提供的一个HandlerInterceptor接口
*/
public class LoginInterceptor implements HandlerInterceptor { /**
* 在调用Controller的请求方法之前执行
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
//如果session获取的用户信息为null,表示没有登陆
//那么将重定向到登陆页面
if(session.getAttribute("user") == null){
response.sendRedirect("login.html");
return false;
}
return true;
} /**
* 在调用Controller方法之后执行(注意:只有在preHandle方法返回true的情况下才会执行)
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("请求到达方法之后...");
} /**
* 在视图响应之后执行(注意:只有在preHandle方法返回true的情况下才会执行)
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("响应视图之后...");
}
}
Spring MVC 拦截器 (十)的更多相关文章
- SSM(spring mvc+spring+mybatis)学习路径——2-2、spring MVC拦截器
目录 2-2 Spring MVC拦截器 第一章 概述 第二章 Spring mvc拦截器的实现 2-1 拦截器的工作原理 2-2 拦截器的实现 2-3 拦截器的方法介绍 2-4 多个拦截器应用 2- ...
- spring mvc 拦截器的使用
Spring MVC 拦截器的使用 拦截器简介 Spring MVC 中的拦截器(Interceptor)类似于 Servler 中的过滤器(Filter).用于对处理器进行预处理和后处理.常用于日志 ...
- 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor
[Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...
- Spring Boot 2.X(九):Spring MVC - 拦截器(Interceptor)
拦截器 1.简介 Spring MVC 中的拦截器(Interceptor)类似于 Servlet 开发中的过滤器 Filter,它主要用于拦截用户请求并作相应的处理,它也是 AOP 编程思想的体现, ...
- Spring MVC拦截器配置
Spring MVC拦截器配置 (1)自定义拦截器 package learnspringboot.xiao.other; import org.springframework.web.servlet ...
- 写的太细了!Spring MVC拦截器的应用,建议收藏再看!
Spring MVC拦截器 拦截器是Spring MVC中强大的控件,它可以在进入处理器之前做一些操作,或者在处理器完成后进行操作,甚至是在渲染视图后进行操作. 拦截器概述 对于任何优秀的MVC框架, ...
- 对于Spring MVC 拦截器的一些了解
Spring MVC 拦截器的执行顺序 应用场景 假设请求 localhost:8080/ 则要求直接重定向到 localhost:8080/login ; 定义拦截器顺序 permission lo ...
- Spring MVC拦截器浅析
Spring MVC拦截器 重点:Spring MVC的拦截器只会拦截控制器的请求,如果是jsp.js.image.html则会放行. 什么是拦截器 运行在服务器的程序,先于Servlet或JSP之前 ...
- spring MVC拦截器01
spring MVC拦截 作用:身份校验,权限检查,防止非法訪问. 场景:一个bbs系统,用户没有登录就无法发帖或者删除评论; 一个博客系统,没有登录就无法发表博文,无法添加分类,无法删除博文. sp ...
- spring mvc拦截器原理分析
我的springMVC+mybatis中的interceptor使用@autowired注入DAO失败,导致报空指针错误,这个是为什么呢? :空指针说明没有注入进来,你可以检查一下你的这个拦截器int ...
随机推荐
- leetcode — powx-n
/** * Source : https://oj.leetcode.com/problems/powx-n/ * * Created by lverpeng on 2017/7/18. * * Im ...
- 基于openssl搭建https服务器
1. 搭建web环境 我这里使用源码编译安装方式安装httpd.详情可以参加我的一篇博客http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_1 ...
- Kubernetes 弹性伸缩全场景解析 (一)- 概念延伸与组件布局
传统弹性伸缩的困境 弹性伸缩是Kubernetes中被大家关注的一大亮点,在讨论相关的组件和实现方案之前.首先想先给大家扩充下弹性伸缩的边界与定义,传统意义上来讲,弹性伸缩主要解决的问题是容量规划与实 ...
- Go的50度灰:开发者要注意的陷阱和常见错误
Go是一门简单有趣的语言,但与其他语言类似,它会有一些技巧...这些技巧的绝大部分并不是Go的缺陷造成的.如果你以前使用的是其他语言,那么这其中的有些错误就是很自然的陷阱.其它的是由错误的假设和缺少细 ...
- MyBatis源码解析(七)——DataSource数据源模块之托管数据源
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6675700.html 1 回顾 之前介绍的非池型与池型数据源都是MyBatis自己定义的内 ...
- Apollo 10 — adminService 全量发布
目录 UI 界面 Portal 服务 admin 服务 总结 1. UI 界面 2. Portal 服务 当我们点击上面的发布按钮的时候,调用的当然是 portal 的接口.具体代码如下: /** * ...
- oracle10G/11G官方迅雷下载地址合集
原文链接:https://blog.csdn.net/zlsunnan/article/details/8058235 ORACLE11GR2 Oracle Database 11g Release ...
- GlashFish部署的程序时好时坏,无法访问时报404
1.问题 glashfile部署的程序时好时坏, 有时部署后访问直接就报404错误 查看log, log如下[2017/09/26 18:22:54.820][ ] ERR ...
- axios 中文文档(转载)
axios中文文档 转载来源:https://www.jianshu.com/p/7a9fbcbb1114 原始出处:lewis1990@amoy axios 基于promise用于浏览器和node. ...
- java8 Stream sorted()的一次调用链记录
代码 public static void main (String[] args) { Stream.of("d2", "a2", "b1" ...