为了更容易理解,我们通过一个代码例子来演示。

例子:

我们现在要访问http://localhost:8080/main.html页面,这个页面需要登录之后才能够浏览,没登录不能浏览。

那么现在问题来了。如何判断用户有没有登录呢?

很简单,我们可以在用户登录成功的时候,将用户的用户名写到session中,这样我们只要检查session中用户名是不是空就能得知用户有没有登录了。

下边这个是一个很简单的登录验证,当我们输入的用户名不为空,且密码为123456时就登录成功了,登录后跳转到http://localhost:8080/main.html页面。所以我们可以在重定向到目标页面之前将用户名放到session中(代码标红处)。

@Controller
public class LoginController {
@PostMapping("/user/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
Map<String,Object> map,
HttpSession session){
if (!StringUtils.isEmpty(username) && "123456".equals(password)){
session.setAttribute("loginUser",username);
return "redirect:/main.html";
}else {
map.put("msg","用户名或密码错误");
return "login";
}
}
}

接下来我们要编写一个拦截器,判断用户有没有登录(判断session中loginUser是否为空)

编写自定义拦截器:

1.实现HandlerInterceptor接口。

2.重写接口中的默认方法。(jdk1.8)

public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object user = request.getSession().getAttribute("loginUser");
if (user == null){
//未登录,转发到登录页面
request.getRequestDispatcher("/index.html").forward(request,response);
return false; }else{
//已登录
return true;
}
}
}

3.注册拦截器(将拦截器放到ioc容器中)

@Configuration
public class MyMvcConfig implements WebMvcConfigurer{
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration interceptor = registry.addInterceptor(new LoginHandlerInterceptor());
interceptor.addPathPatterns("/**");
interceptor.excludePathPatterns("/");
interceptor.excludePathPatterns("/index.html");
interceptor.excludePathPatterns("/user/login");
interceptor.excludePathPatterns("/asserts/**");
interceptor.excludePathPatterns("/webjars/**");
}
}

代码讲解:

addPathPatterns方法指定要拦截那些请求, /**代表所有请求都拦截

excludePathPatterns方法指定排除掉哪些请求不拦截。

不能拦截的请求有:

  访问登录页面的请求:"/"和"/index.html"

  处理登录的请求:"/user/login"

  访问静态资源:"/asserts/**" 和  "/webjars/**"

其中asserts是静态资源文件夹static下的包:

完。

springboot实现自定义拦截器的更多相关文章

  1. 【学习】SpringBoot之自定义拦截器

    /** * 自定义拦截器 **/ @Configuration//声明这是一个拦截器 public class MyInterceptor extends WebMvcConfigurerAdapte ...

  2. SpringBoot之自定义拦截器

    一.自定义拦截器实现步骤 1.创建拦截器类并实现HandlerInterceptor接口 2.创建SpringMVC自定义配置类,实现WebMvcConfigurer接口中addInterceptor ...

  3. SpringMVC拦截器与SpringBoot自定义拦截器

    首先我们先回顾一下传统拦截器的写法: 第一步创建一个类实现HandlerInterceptor接口,重写接口的方法. 第二步在XML中进行如下配置,就可以实现自定义拦截器了 SpringBoot实现自 ...

  4. SpringBoot自定义拦截器实现IP白名单功能

    SpringBoot自定义拦截器实现IP白名单功能 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/8993331.html 首先,相关功能已经上线了,且先让我先 ...

  5. springboot 2.0+ 自定义拦截器

    之前项目的springboot自定义拦截器使用的是继承WebMvcConfigurerAdapter重写常用方法的方式来实现的. 以下WebMvcConfigurerAdapter 比较常用的重写接口 ...

  6. SpringBoot学习笔记:自定义拦截器

    SpringBoot学习笔记:自定义拦截器 快速开始 拦截器类似于过滤器,但是拦截器提供更精细的的控制能力,它可以在一个请求过程中的两个节点进行拦截: 在请求发送到Controller之前 在响应发送 ...

  7. SpringBoot(11) SpringBoot自定义拦截器

    自定义拦截器共两步:第一:注册.第二:定义拦截器. 一.注册 @Configuration 继承WebMvcConfigurationAdapter(SpringBoot2.X之前旧版本) 旧版本代码 ...

  8. SpringBoot自定义拦截器实现

    1.编写拦截器实现类,此类必须实现接口   HandlerInterceptor,然后重写里面需要的三个比较常用的方法,实现自己的业务逻辑代码 如:OneInterceptor package com ...

  9. SpringBoot 2.x 自定义拦截器并解决静态资源访问被拦截问题

      自定义拦截器 /** * UserSecurityInterceptor * Created with IntelliJ IDEA. * Author: yangyongkang * Date: ...

随机推荐

  1. CVE-2012-0003:Microsoft Windows Media Player winmm.dll MIDI 文件堆溢出漏洞调试分析

    0x01 蜘蛛漏洞攻击包 前言:2012 年 2月,地下黑产中流行着一款国产名为蜘蛛漏洞的攻击包 -- "Zhi-Zhu Exploit Pack",该工具包含 5 个漏洞,都是在 ...

  2. nodejs-REPL/回调函数/事件循环

    REPL 回调函数 事件循环 REPL----------------------------------------------------- Node.js REPL(Read Eval Prin ...

  3. 学习Canvas绘图与动画基础 为多边形着色(三)

    1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="U ...

  4. 3-5年以上的Android原生开发如何深入进阶?高级工程师必须要掌握哪些?

    前言 曾听过很多人说Android学习很简单,做个App就上手了,工作机会多,毕业后也比较容易找工作.这种观点可能是很多Android开发者最开始入行的原因之一. 在工作初期,工作主要是按照业务需求实 ...

  5. Day002 Java开发环境搭建

    Java开发环境搭建 JDK.JRE.JVM JDK: Java Development Kit(包涵JRE) JRE: Java Runtime Environment(包涵JVM) JVM: Ja ...

  6. Yii2表头强制不换行

    在Yii2中使用GridView生成的表格有一个小问题,那就是表头的列宽是根据列的值自适应的,但有时值的长度比较小,表头就会出现下面这种情况(表头不在同一行,非常的不利于数据的查看) 设置强制不换行可 ...

  7. 语音降噪论文“A Hybrid Approach for Speech Enhancement Using MoG Model and Neural Network Phoneme Classifier”的研读

    最近认真的研读了这篇关于降噪的论文.它是一种利用混合模型降噪的方法,即既利用了生成模型(MoG高斯模型),也利用了判别模型(神经网络NN模型).本文根据自己的理解对原理做了梳理. 论文是基于" ...

  8. c语言编程学习之字符串

    字符串字面量与字符变量 1.字符串字面量 字符串字面量是一对双引号括起来的字符序列.当c语言编译器在程序中遇到长度为n的字符串字面量时,它会为字符串字面量分配长度为n+1的内存空间.这块内存空间用来存 ...

  9. CRM数据分析的重要作用

    优秀的管理者都知道企业想要实现业务大幅增长不是一件容易的事情.这往往需要通过明智的决策和正确的时机才能够实现.所以,您需要有洞察正确的时间和制定正确决策的能力,这样才能确保您做出正确的决定. CRM系 ...

  10. [Qt]《开发指南》3.1源码分析

    界面: ButterflyGraph: 可以看出,本工程在主程序main里调用窗口界面qmywidget,窗口界面继承了QWidget,并调用自定义类qperson,推测是qmywidget类中的一个 ...