1、创建一个普通的web工程。

2、先创建需要的基础文件,比如一个用户类。

package com.example.mode;

public class User {
private Integer id;
private String name; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

再创建一个监听类,这个类继承自HandlerInterceptor,然后,在这个类里就可以处理一些监听到的信息,比如有的登陆,有的没有登陆。

package com.example.interceptor;

import com.example.mode.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//这里编写拦截规则,可以从session中获取用户信息,这个名为user的attribute对象如果为空,就返回error,因为没有登陆
// 如果这个对象存在,就返回true,不做任何处理。
User user= (User) request.getSession().getAttribute("user");
if(user==null) {
response.sendRedirect(request.getContextPath()+"/user/error");
return false;
} return true;
} @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }
}

这里还要建一个监听配置类,这个配置类来决定监听的对象集合,监听的类型,这里主要是监听web网页,所以,还要实现一个

WebMvcConfigurer接口,然后重写这个接口里的addInterceptor程序,把上面的MyInterceptor监听类,添加到web网页监听中去。
package com.example.config;

import com.example.interceptor.MyInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyInterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//要拦截的路径集合
String[] addPathPatterns={"/user/**"};
//要排除的路径集合
String[] excludePathPatterns={"/user/out","/user/error","/user/login"};
//将规则集合添加到注册中
registry.addInterceptor(new MyInterceptor())
.addPathPatterns(addPathPatterns)
.excludePathPatterns(excludePathPatterns);
}
}

这些工作都做完了,现在可以去编写控制类了,

package com.example.control;

import com.example.mode.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; //这个注释是表明这个类是一个Controller,还有就是以下所有方法都带ResponseBody
@RestController
//这里是为了方便,以后所有的指向都会默认指向/user/后面的路径了
@RequestMapping("/user")
public class MyController {
// 以下为登陆方法,在里面可以检查登陆信息,然后填充request对象,再定向到需要的页面。
@RequestMapping("/login")
public Object login(HttpServletRequest request){
User user=new User();
user.setId(1001);
user.setName("翠花");
request.getSession().setAttribute("user",user);
return "登陆成功";
}
// 登陆成功以后,定位到用户中心页面
@RequestMapping("/center")
public Object center(HttpServletRequest request){
User user=(User) request.getSession().getAttribute("user");
return "欢迎编号为:"+user.getId()+" 用户:"+user.getName();
}
// 没有登陆的用户访问的内容
@RequestMapping("/out")
public Object out(){
return "普通用户访问页面";
}
// 当非登陆用户访问到某些页面时会定向到出错页面。
@RequestMapping("/error")
public Object error(){
return "请登陆后再访问,谢谢!";
}
}

然后就可以直接运行了。

srpingboot拦截器的更多相关文章

  1. 6. ModelDriven拦截器、Preparable 拦截器

    1. 问题 Struts2 的 Action 我们将它定义为一个控制器,但是由于在 Action 中也可以来编写一些业务逻辑,也有人会在 Action 输入业务逻辑层. 但是在企业开发中,我们一般会将 ...

  2. springmvc的拦截器

    什么是拦截器                                                         java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...

  3. Struts的拦截器

    Struts的拦截器 1.什么是拦截器 Struts的拦截器和Servlet过滤器类似,在执行Action的execute方法之前,Struts会首先执行Struts.xml中引用的拦截器,在执行完所 ...

  4. Struts2拦截器的执行过程浅析

    在学习Struts2的过程中对拦截器和动作类的执行过程一度陷入误区,特别读了一下Struts2的源码,将自己的收获分享给正在困惑的童鞋... 开始先上图: 从Struts2的图可以看出当浏览器发出请求 ...

  5. 学习SpringMVC——拦截器

    拦截器,顾名思义就是用来拦截的. 那什么是拦截,又为什么要拦截.对于Spring MVC来说,拦截器主要的工作对象就是用户的请求,拦截下来之后,我们可以在拦截的各个阶段悉心呵护[为所欲为].常见的比如 ...

  6. alias拦截器的使用

    在SSH项目中,有时需要由一个Action跳转到另一个Action.有两种方式可以实现Action之间的跳转,一种是chain,另一种是redirectAction,这两种方式之间的区别是chain是 ...

  7. Struts2入门(二)——配置拦截器

    一.前言 之前便了解过,Struts 2的核心控制器是一个Filter过滤器,负责拦截所有的用户请求,当用户请求发送过来时,会去检测struts.xml是否存在这个action,如果存在,服务器便会自 ...

  8. 通过拦截器Interceptor实现Spring MVC中Controller接口访问信息的记录

    java web工程项目使用了Spring+Spring MVC+Hibernate的结构,在Controller中的方法都是用于处理前端的访问信息,Controller通过调用Service进行业务 ...

  9. spring 拦截器

    1.mvc.xml <!-- 自定义拦截链配置 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping p ...

随机推荐

  1. @Required 注解有什么用?

    @Required 应用于 bean 属性 setter 方法.此注解仅指示必须在配置时使用 bean 定义中的显式属性值或使用自动装配填充受影响的 bean 属性.如果尚未 填充受影响的 bean ...

  2. 什么是多线程环境下的伪共享(false sharing)?

    伪共享是多线程系统(每个处理器有自己的局部缓存)中一个众所周知的性能问 题.伪共享发生在不同处理器的上的线程对变量的修改依赖于相同的缓存行,如 下图所示: 伪共享问题很难被发现,因为线程可能访问完全不 ...

  3. js身份证精确认证

    function checkIdCard(idcard) { // 1 "验证通过!", 0 //身份证号码校验错误 var Errors = new Array( "1 ...

  4. 【C语言】预处理、宏定义、内联函数

    一.由源码到可执行程序的过程 1. 预处理: 源码经过预处理器的预处理变成预处理过的.i中间文件 1 gcc -E test.c -o test.i 2. 编译: 中间文件经过编译器编译形成.s的汇编 ...

  5. Spark项目应用-电子商务大数据分析总结

    一. 数据采集(要求至少爬取三千条记录,时间跨度超过一星期)数据采集到本地文件内容   爬取详见:python爬取京东评论   爬取了将近20000条数据,156个商品种类,用时2个多小时,期间中断数 ...

  6. 【Android开发】EasyPermissions 请求权限

    安卓6.0以后,开发应用的时候,仅在AndroidManifest.xml中申请权限已经不可以了,需要在代码中动态申请. 现在看一个google推出的机制:EasyPermissions 引入步骤: ...

  7. Java 请求转发和重定向的区别以及JavaWeb三大作用域

    三大作用域以及转发和重定向 学习总结 1. 转发和重定向 转发 重定向 转发和重定向的区别: 什么时候用转发什么时候用重定向 三大作用域 作用域类型 作用域方法 如何选择作用域 总结 学习总结 1. ...

  8. 前端框架小实验-在umi框架中以worker线程方式使用SQL.js的wasm

    总述:在Win7环境下配置umijs框架,在框架中用worker线程方式使用SQL.js的wasm,在浏览器端实现数据的增删改查以及数据库导出导入. 一.安装node.js 1.Win7系统只支持no ...

  9. 攻防世界——stegano

    分析 1. 一个pdf,里边都是英文. 打开pdf "ctrl + F",检查flag 然活这里边直接告诉你,flag不在这里,一般都这么说了那就是真的不在了. 2. txt打开, ...

  10. SpringMVC获取请求参数-集合类型

    1.创建User实体类 ```java public class User { private String username; private int age; public String getU ...