Spring Boot Vue 毕设系统讲解 3

news2024/11/15 14:08:54

目录

项目配置类

项目中配置的相关代码

spring Boot 拦截器相关知识

一、基于URL实现的拦截器:

二、基于注解的拦截器

三、把拦截器添加到配置中,相当于SpringMVC时的配置文件干的事儿:

项目配置类

项目中配置的相关代码

首先定义项目认证授权拦截器   AuthorizationInterceptor 把这个类注册为 bean  使用的是 @Bean注解

其次是重写 addInterceptors方法 将然后将注册的认证授权bean 添加到拦截器的链条当中,设置是所有请求都要过拦截器,出了static下面的静态资源不拦截

然后是重写 addResourceHandlers  这里是对项目的静态资源做定向解析,addResourceHandlers是请求路径.addResourceLocations 是资源的路径

spring Boot 拦截器相关知识

其实spring boot拦截器的配置方式和springMVC差不多,只有一些小的改变需要注意下就ok了。

下面主要介绍两种常用的拦截器:

一、基于URL实现的拦截器:
public class LoginInterceptor extends HandlerInterceptorAdapter{  
    @Override  
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
        String path = request.getServletPath();  
        if (path.matches(Const.NO_INTERCEPTOR_PATH)) {  
            //不需要的拦截直接过  
            return true;  
        } else {  
            // 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等  
            System.out.println("====================================");  
            return true;  
        }  
    }  
} 


关键代码:path.matches(Const.NO_INTERCEPTOR_PATH 就是基于正则匹配的url。

public class Const {  
    public static final String SUCCESS = "SUCCESS";  
    public static final String ERROR = "ERROR";  
    public static final String FIALL = "FIALL";  
    /**********************对象和个体****************************/  
    public static final String SESSION_USER = "loginedAgent"; // 用户对象  
    public static final String SESSION_LOGINID = "sessionLoginID"; // 登录ID  
    public static final String SESSION_USERID = "sessionUserID"; // 当前用户对象ID编号  
    public static final String SESSION_USERNAME = "sessionUserName"; // 当前用户对象ID编号  
    public static final Integer PAGE = 10; // 默认分页数  
    public static final String SESSION_URL = "sessionUrl"; // 被记录的url  
    public static final String SESSION_SECURITY_CODE = "sessionVerifyCode"; // 登录页验证码 
    // 时间 缓存时间  
    public static final int TIMEOUT = 1800;// 秒  
    public static final String ON_LOGIN = "/logout.htm";  
    public static final String LOGIN_OUT = "/toLogout";  
    // 不验证URL anon:不验证/authc:受控制的  
    public static final String NO_INTERCEPTOR_PATH =".*/((.css)|(.js)|(images)|(login)|(anon)).*";  
} 

二、基于注解的拦截器

①创建注解:

/**  
 * 在需要登录验证的Controller的方法上使用此注解  
 */  
@Target({ElementType.METHOD})// 可用在方法名上  
@Retention(RetentionPolicy.RUNTIME)// 运行时有效  
public @interface LoginRequired {   
} 


②创建拦截器:

public class AuthorityInterceptor extends HandlerInterceptorAdapter{  
     @Override  
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
        // 如果不是映射到方法直接通过  
        if (!(handler instanceof HandlerMethod)) {  
            return true;  
        }  
        // ①:START 方法注解级拦截器  
        HandlerMethod handlerMethod = (HandlerMethod) handler;  
        Method method = handlerMethod.getMethod();  
        // 判断接口是否需要登录  
        LoginRequired methodmethodAnnotation = method.getAnnotation(LoginRequired.class);  
        // 有 @LoginRequired 注解,需要认证  
        if (methodAnnotation != null) {  
            // 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等  
            System.out.println("====================================");  
            return true;  
        }  
        return true;  
    }  
} 
三、把拦截器添加到配置中,相当于SpringMVC时的配置文件干的事儿:
/**  
 * 和springmvc的webmvc拦截配置一样  
 * @author BIANP  
 */  
@Configuration  
public class WebConfigurer implements WebMvcConfigurer {  
     @Override  
     public void addInterceptors(InterceptorRegistry registry) {  
        // 拦截所有请求,通过判断是否有 @LoginRequired 注解 决定是否需要登录  
        registry.addInterceptor(LoginInterceptor()).addPathPatterns("/**");  
        registry.addInterceptor(AuthorityInterceptor()).addPathPatterns("/**");  
     }  
     @Bean  
     public LoginInterceptor LoginInterceptor() {  
         return new LoginInterceptor();  
     }  
     @Bean  
     public AuthorityInterceptor AuthorityInterceptor() {  
         return new AuthorityInterceptor();  
     }  
} 

1、一定要加@Configuration 这个注解,在启动的时候在会被加载。

2、有一些教程是用的“WebMvcConfigurerAdapter”,不过在spring5.0版本后这个类被丢弃了 WebMvcConfigurerAdapter ,虽然还可以用,但是看起来不好。

3、也有一些教程使用的WebMvcConfigurationSupport,我使用后发现,classpath:/META/resources/,classpath:/resources/,classpath:/static/,classpath:/public/不生效。具体可以原因,大家可以看下源码因为:WebMvcAutoConfiguration上有个条件注解:

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class) 
所以还是建议使用WebMvcConfigurer, 其实springMVC很多东西,都可以搬到springboot中来使用,只需要把配置文件的模式,改成 对应@Configuration 类就好了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1909786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebRTC API接口教程:实现高效会议的步骤?

WebRTC api接口教程如何使用?WebRTC api接口的功能? WebRTC无需中间服务器即可传输音视频流,为视频会议、在线教育等应用提供了强大的支持。AokSend将详细介绍如何利用WebRTC API接口实现高效会议的步骤。 WebRTC API接口教程:获…

澳大利亚TikTok直播为什么需要海外直播专线?

近年来,许多卖家为了解决澳大利亚TikTok直播中的卡顿和高延迟问题,纷纷选择使用海外直播专线。这种专线服务是一种高效、低延迟的数据传输解决方案,专为需要高质量网络连接的场合设计。 与公共互联网相比,海外直播专线提供更稳定、…

海外展会 | 7月8-11日,INNOPROM 2024 ,云仪邀您俄罗斯观展→

7月8日,2024俄罗斯工业博览会(INNOPROM 2024)在俄罗斯工业中心第三大城市“叶卡捷琳堡国际展览中心”隆重举办。作为俄罗斯最大的工业展览会之一,INNOPROM 2024不仅展示了俄罗斯本土的工业实力,更是一个集合了全球最新…

快团团开团大团长和帮卖团长如何合并“收件人信息相同的订单”核销打印?

快团团开团大团长和帮卖团长如何合并“收件人信息相同的订单”核销打印? 一、背景 经营方式为线下自提等无需快递的团长,在核销打印订单时,需要将“收件人信息相同的订单”合并核销打印 二、操作说明 第一步,团长电脑端登陆快…

mybatis 延迟加载

MyBatis的延迟加载(Lazy Loading)是一种优化技术,用于在需要时才加载关联对象或集合,从而提高性能和效率。以下是对MyBatis延迟加载的详细介绍: 延迟加载的基本概念 延迟加载是指在第一次访问对象的属性时才加载该对象…

G24代刷卡鉴权方案

PICK_G24 产品型号 PICK_G24 尺寸 124x90x12mm(不含安装支架) 屏幕尺寸 4.2 inch 显示技术 电子墨水屏显示 显示区域面积 (mm) 84.8(H) x 63.6(V) 分辨率 400*300 像素密度 120dpi 显示颜色 黑/白 外观颜色 白色&灰外圏 按键 …

关于 Mac 系统 .DS_store 文件的起源

原文:Arno - 2006.10.01 (前排提醒:可以在 .gitignore 中添加 .DS_Store,否则 git 仓库会存储这个和项目无关的文件。) 如果你是 Mac 用户,曾经将文件从 Mac 传输到 Windows,那么可能对 .DS_S…

跟极光同频共振?!VELO Angel Ride坐垫,在挪威一起踏上的绿色征途!

如果可以选择,你喜欢徒步旅行还是骑脚踏车呢?      在挪威那片被午夜阳光亲吻的土地上,每一次骑行都是一场与自然对话的盛宴。维乐Angel Ride坐垫,作为环保与骑行舒适度的完美结合,携手每一位探索者,在这片北欧仙…

如何把excel翻译成中文?简单又实用的excel翻译器分享

自打步入职场之后,我才逐渐发现原来处理多语言的Excel文档现已经成为了职场人经常需要面对的挑战~传统的手动翻译不仅耗时费力,还容易出错,尤其是在面对大量数据和复杂的公式时,更是令人头疼。 幸运的是,后来被我发现…

生成图质量评价

1. RichHF-18K 论文地址 解决问题: 如何对生成图质量进行算法评价,以优化图片质量,提升模型生成能力 解决思路: 参考多模态模型,构建评价模型,从7个维度分三个分支对生成图进行测评: Tips&…

【鸿蒙学习笔记】交互事件

官方文档:交互事件 目录标题 分类交互事件-触屏交互事件-手势事件单一手势 分类 交互事件-触屏 在组件上按下(Down) , 滑动(Move) , 抬起(up)时触发的回调事件。包括点击事件、触摸事件和拖拽事件 交互事件-手势事件 在手机上点击打开应用 , 长按后拖动应用 , 这…

idea中的块映射中的子元素无效

在yml文件中,出现块映射中的子元素无效,如图: 在YAML文件中,通常需要在键和值之间添加空格,以确保文件的可读性和正确解析。一些YAML解析器可能要求在冒号后面必须有空格才能正确解析文件。如果不加空格,解…

eventFilter事件过滤器

通过使用eventFilter 事件过滤器&#xff0c;实现QLabel的 Enter、Leave 、MouseButtonPress、MouseButtonDblClick、MouseButtonRelease EventFilterExample.h #ifndef EVENTFILTEREXAMPLE_H #define EVENTFILTEREXAMPLE_H#include <QWidget>namespace Ui { class Event…

C++内存的一些知识点

一、内存分区 在C中&#xff0c;内存主要分为以下几个区域&#xff1a; 代码区&#xff1a;存放函数体的二进制代码。 全局/静态存储区&#xff1a;存放全局变量和静态变量&#xff0c;这些变量在程序的整个运行期间都存在。常量存储区&#xff1a;存放常量&#xff0c;这些值…

聚观早报 | 2025款比亚迪海豚上市;小米15系列防水细节

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 7月9日消息 2025款比亚迪海豚上市 小米15系列防水细节 荣耀Magic V3将更轻薄 真我GT6通信细节 Apple Watch SE将…

修改服务器挂载目录

由于我们的项目通常需要挂载一个大容量的数据盘来存储文件数据&#xff0c;所以我们每台服务器都需要一个默认的挂载目录来存放这些数据&#xff0c;但是由于我们的误操作&#xff0c;导致挂载目录名字建错了&#xff0c;这时候后端就读不到挂载目录了&#xff0c;那我们我们的…

layui项目中的layui.define、layui.config以及layui.use的使用

第一步:创建一个layuiTest项目&#xff0c;结构如下 第二步&#xff1a;新建一个test.js,利用layui.define定义一个模块test,并向外暴露该模块&#xff0c;该模块里面有两个方法method1和method2. 第三步&#xff1a;新建一个test.html&#xff0c;在该页面引入layui.js&#x…

能见度监测系统—高精度的能见度测量

TH-NJD10能见度监测系统是一种用于实时监测和测量大气中能见度情况的系统&#xff0c;广泛应用于交通运输、气象观测、环境监测等领域。能见度监测系统通过安装在特定位置的监测器和传感器&#xff0c;实时采集大气中的光散射、光衰减等参数&#xff0c;经过计算处理后得出能见…

六西格玛培训:打破瓶颈,提升效率——张驰咨询

在当今这个竞争激烈的商业环境中&#xff0c;企业要想在市场中脱颖而出&#xff0c;就必须不断提高产品和服务的质量&#xff0c;同时优化流程以降低成本。六西格玛&#xff0c;作为一种旨在减少变异、提高过程能力的管理策略&#xff0c;正逐渐成为企业提升竞争力的关键工具。…

LeetCode 算法:腐烂的橘子 c++

原题链接&#x1f517;&#xff1a;腐烂的橘子 难度&#xff1a;中等⭐️⭐️ 题目 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。 每分钟&#…