利用拦截器与自定义注解实现未登录拦截

SpringBoot使用拦截器(Interceptor)实现用户登录校验 在系统中,经常需要在处理用户请求之前和之后执行一些行为,例如检测用户的权限,或者将请求的信息记录到日志中。当然不仅仅这些,所以需要一种机制,拦截用户的请求,在请求的前后添加处理逻辑。SpringBoot 提供了 Interceptor 拦截器机制,用于请求的预处理和后处理。在 SpringBoot 中定义一个拦截器有两种方法:第一种是实现 HandlerInterceptor 接口,或者继承实现了 HandlerInterceptor 接口的类(例如:HandlerInterceptorAdapter)。 阅读详情

       发现公司项目里面实现登录拦截用的是自定义注解,一直没搞懂流程,最近闲来无事研究一番,发现是和拦截器配合着使用,就又巩固了一下拦截器的知识,为了登录效果又研究了一下SSO单点登录,所以demo里面用到了同域SSO的单点登录,其实就是cookie的使用,父域SSO,和跨域SSO,这里不做详细讲解,有兴趣的小伙伴可以上慕课网搜索,有详细的课程讲解,废话不多说,下面开始。

一:拦截器

      拦截器需要先配置,配置的方法有好几种。

      第一种:拦截所有的url

      <mvc:interceptors>  

           <bean class="com.itmyhome.MyInterceptor" />  

     </mvc:interceptors>  

     第二种:拦截匹配的URL

     <mvc:interceptors>
         <mvc:interceptor>
             // 拦截器的url
             <mvc:mapping path="/user/**" />
             //拦截器走的方法
             <bean class="customerAnnotation.CheckLoginInterceptor" />
         </mvc:interceptor>
     </mvc:interceptors> -->

    第三种:HandlerMappint上的拦截器

    <!-- 登录拦截器 所有方法拦截-->

    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
         <property name="interceptors">
           <list>
                   <bean class="customerAnnotation.CheckLoginInterceptor"/>
           </list>
          </property>
    </bean>

注意:

   如果使用了<mvc:annotation-driven />, 它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter 这两个bean,所以就没有机会再给它注入interceptors属性,就无法指定拦截器。当然我们可以通过人工配置上面的两个Bean,不使用 <mvc:annotation-driven />,就可以给interceptors属性注入拦截器了。

拦截器类:拦截器需要继承HandlerInterceptorAdapter这个类并重写其三个方法

   分别实现预处理、后处理(调用了Service并返回ModelAndView,但未进行页面渲染)、返回处理(已经渲染了页面)
在preHandle中,可以进行编码、安全控制等处理;
在postHandle中,有机会修改ModelAndView;
在afterCompletion中,可以根据ex是否为null判断是否发生了异常,进行日志记录。
参数中的Object handler是下一个拦截器。

最主要的方法是preHandle方法

   如果方法返回false 从当前拦截器往回执行所有拦截器的afterCompletion方法,再退回拦截器链 如果返回true 执行下一个拦截器,

直到所有拦截器都执行完毕 再运行被拦截的Controller 然后进入拦截器链从最后一个拦截器往回运行所有拦截器的postHandle方法 

接着依旧是从最后一个拦截器往回执行所有拦截器的afterCompletion方法

  

二:自定义注解

 

 

 

 

接下来开始代码编写

     先自定义一个注解:

       

     这样就可以了

接下来写一个请求方法类:

这个注解的拦截逻辑写在我们拦截器里面

拦截器配置:我这里用的是第三种方法

 

CheckLoginInterceptor方法:

    我这里就是判断session里面有没有login这个session,如果有则判定为登录,也可以用cookie,这些都是其次,主要的用途和流程就是这样了,当你想让一个

类是在登录的情况下才能访问时,就只要给它添加一个@CheckLogin(value = CheckLogin.WEB)注解就可以了,就是这么简单。

 

 

下面把登录相关的代码也贴出来吧:

需要demo的可以发邮件给我liri_1024@163.com

希望本篇文章对你有所帮助,不足之处欢迎指出,谢谢!

 

Spring Boot拦截器精讲 我们对拦截器并不陌生,无论是 Struts 2 还是 Spring MVC 中都提供了拦截器功能,它可以根据 URL 对请求进行拦截,主要应用于登陆校验、权限验证、乱码解决、性能监控和异常处理等功能上。Spring Boot 同样提供了拦截器功能。在 Spring Boot 项目中,使用拦截器功能通常需要以下 3 步: 定义拦截器; 注册拦截器; 指定拦截规则(如果是拦截所有,静态资源也会被拦截)。 定义拦截器 在 Spring Boot 中定义拦截器十分的简单,只需要创建一个拦截器类,并实现 Handle 阅读详情

相关推荐

【SpringBoot】46、SpringBoot中整合JWT实现Token验证(拦截器篇)

前言 上篇文章我们已经实现了使用自定义注解验证 token 信息,这样我们就会发现,当我们需要验证的接口较多时,我们需要每个方法上面都加上 @JwtToken 这个注解,也是非常麻烦, 本片文章,我们继续使用拦截器来实现 token 信息的验证 如果对整合 JWT 还不熟悉的朋友,可以先看看我的这篇博客:【SpringBoot】四十四、SpringBoot中整合JWT实现Token验证(整合篇) 如果对自定义注解验证 token 信息感兴趣的朋友,可以看看我的这篇博客:【SpringBoot】四十五、Spr

JACKAL 21万+

利用拦截器和自定义注解实现未登录拦截

利用拦截器和自定义注解实现未登录拦截实现思路自定义注解拦截器代码实现拦截器加入配置其它微服务中引用使用该登录权限校验代码实现 实现思路 所有需要有登录权限的接口先校验是否已登录(登录成功会往redis缓存中写入数据记录) 自定义注解 在Java中创建自定义注解 创建自定义注解与编写接口很相似,除了它的接口关键字前有个@符号。 注意以下几点: 注解方法不能有参数。 注解方法的返回类型局限于原始类型...

@龙猫的博客 6867

【SpringBoot】45、SpringBoot中整合JWT实现Token验证(注解篇)

前言 上篇文章,我们已经在 SpringBoot 中整合了 JWT 并实现了 Token 验证,那我们在实际应用中就会发现,如果每个 视图层(controller)都手动验证 token,代码就会显得特别臃肿,本篇文章主要为了解决该问题。 如果对整合 JWT 还不熟悉的朋友,可以先看看我的这篇博客:【SpringBoot】四十四、SpringBoot中整合JWT实现Token验证 自定义注解 1、创建自定义注解 package com.asurplus.common.annotation; import

JACKAL 21万+

SSM中添加拦截器(拦截未登录用户)

  目前自己写了一个小项目。希望在未登录状态时,不能访问其他页面,只能访问登录页。在该项目中添加拦截器即可实现该功能。   首先新建一个interceptor拦截器。 package com.qust.shbz.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSer...

背着梦的幸存者 1万+

Neo4j 智能供应链应用源代码简析

本文简析Neo4j智能供应链应用的源代码,让你也可以快速开发自己的供应链应用。

Neo4j 开发者博客 1679

基于freesurfer和3Dslicer的脑区分割与电极定位全流程解析(实战指南)

本文提供了一套基于FreeSurfer和3D Slicer的颅内电极定位实战指南。详细解析了从环境搭建、数据预处理、FreeSurfer脑区分割、影像配准,到3D Slicer中手动与自动化电极定位的全流程。重点介绍了如何利用FreeSurfer进行高精度脑区分割,并在3D Slicer中实现电极触点的可视化标记与坐标提取,最终获得带脑区信息的电极数据,为iEEG/SEEG研究奠定基础。

banana的博客 299

SpringMVC对用户未登录进行拦截

SpringMVC对用户未登录进行拦截拦截功能介绍SpringMVC拦截器与Servlet过滤器的区别拦截器的快速入门代码实现 拦截功能介绍 Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。 将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。 SpringMVC拦截器与Servlet过滤器的

Kuar_的博客 952

论文阅读------Exposure Fusion: A Simple and Practical Alternative to High Dynamic Range Photography

Mertens T, Kautz J, Van Reeth F. Exposure fusion: A simple and practical alternative to high dynamic range photography[C]//Computer graphics forum. Oxford, UK: Blackwell Publishing Ltd, 2009, 28(1): 161-171. 摘要 本文提出了一种将包围曝光的序列融合到高质量图像中的技术,而无需先转换为高动态范围(HD.

qq_25283239的博客 3396

自定义注解 结合拦截器使用:不需登录注解、会员注解

结合:https://blog.youkuaiyun.com/Anenan/article/details/89354244 定义不需要登陆注解 /** * 不需登录 * * @author 向振华 * @date 2019/04/17 14:22 */ @Retention(RetentionPolicy.RUNTIME) @Target(value = {ElementType.METHO...

xzh_blog 1473

cosi-corr操作详细步骤

cosi-corr是一个可以加载到ENVI的软件包,由加利福尼亚理工学院的François Ayoub,  Sébastien Leprince,  and Lionel Keene开发,并且提供源代码,该软件受到了NSF的资助。软件的主要功能是可以满足各种影响的正射校正和影像配准。 针对下载下来的软件包参考《cosi-corr_guide.pdf》,进行配置使用具体详细过程如下: (本机环境

u013299471的专栏 1万+

Unreal 从入门到进阶 之 如何实现Pixel Streaming

Unreal Engine 5 (UE5) 的 Pixel Streaming 是一项基于云端的实时流媒体技术,允许将 UE5 应用的高质量图形渲染结果通过 WebRTC 协议传输到用户的浏览器或轻量级设备,同时将用户输入(如鼠标、键盘、触控)回传到服务器处理。UE的插件相对比较好用,但是就是环境下载总是失败。希望这篇文章对你有所帮助。

TxNet 1369

自定义注解(AOP、拦截器)

Slf4j@Component@Aspect/*** 定义切点*//*** 环绕通知* @return*/log.info("请求链接:{}", httpServletRequest.getRequestURL().toString());log.info("请求类型:{}", httpServletRequest.getMethod());

qq_22858799的博客 2768

挂载(Mount)是什么意思

挂载 = 把一个存储设备或文件系统“接入”到现有的目录树,使其内容能够被访问。

天赐好车的博客 287

项目1在线交流平台-2.开发交流社区注册登录模块-8.配合使用注解定义拦截器-权限管理

文章目录1. 权限管理功能需求2. 使用注解的拦截器设计设计总思路常用自定义注解回顾常用元注解==@Target====@Retention====@Document====@Inherited==使用反射读取注解 Method.getDeclaredAnnotations()Method.getAnnotation(Class annotationClass)自定义注解设计@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)自定义注

xingzhes_的博客 401

华为OD技术面真题 - 数据库Redis - 1

汇总华为OD技术面真题Redis方面高频真题,提供详细解答。

qq_45776114的博客 934

基于FPGA的FIR数字滤波器设计

clear;close all fc=1/4;fs=5/16; %输入给定指标 Rp=3;As=60;Fs=2; f=[fc,fs];m=[1,0]; %计算remezord函数所需参数f,m,dev dev=[(10^(Rp/20)-1)/(10^(Rp/20)+1),10^(-As/20)]; [N,fo,mo,W]=remezord(f,m,dev,Fs); %确定remez函数所需参数 hn=remez(N,fo,mo,W);...

FPGA/MATLAB学习教程/源码/项目合作开发 9454

mysql接口访问频率限制_spring boot中的拦截器限制用户访问接口次数

00:00/00:00//自定义限制注解,加载controller url 上@Retention(RUNTIME)@Target(METHOD)public @interface AccessLimit {int seconds();int maxCount();boolean needLogin() default true;}自定义一个拦截器集成HandlerInterceptorAdapt...

weixin_35810162的博客 269

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SpringBoot最常用的统一功能的处理

用户登录权限校验、统一异常处理、统一异常封装

weixin_55671348的博客 224

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ssm合集(springmvc)---004

第4章 SpringMVC 核心技术 4.1 请求重定向和转发 当处理器对请求处理完毕后,向其它资源进行跳转时,有两种跳转方式:请求转发与重 定向。而根据所要跳转的资源类型,又可分为两类:跳转到页面与跳转到其它处理器。 注意,对于请求转发的页面,可以是WEB-INF中页面;而重定向的页面,是不能为WEB-INF 中页的。因为重定向相当于用户再次发出一次请求,而用户是不能直接访问 WEB-INF 中资 源的。 SpringMVC 框架把原来 Servlet 中的请求转发

rngigskt的博客 130

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Springboot 拦截器 + 自定义注解,实现权限控制

如果你尚未了解Springboot拦截器,请先看本人之前文章:Springboot 拦截器 为了让大家更加直观的了解,下面每个步骤都是先放代码,然后放对应代码的截图。 举例:我们以删除文章为例,假设文章只允许管理员删除。 (1)首先我们创建一个注解类:OnlyAdmin package com.zyq.annotation; import java.lang.annotation.El...

小白一个 1万+

自定义注解,实现拦截器

资讯网站项目      存在登录和未登录两种状态的操作,调用后台方法需要进行判定是否登录。 此时拦截器派上用场//拦截器用处(来源:跟着开涛学SpringMVC) 1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。 2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面; 3、性能监控:有时候系统在某段时间莫名其妙的慢,

不积跬步无以至千里 3678

Springboot实现拦截器功能

preHandle 预先处理,在目标的controller方法执行之前,进行处理 postHandle 在目标的controller方法执行之后,进行处理 afterCompletion 在页面渲染之后进行处理方法

weixin_52875557的博客 1万+

Java基于自定义注解的拦截器

创建 @LoginRequired 自定义注解,作用范围在方法上,有效期为运行时。

hutianle的博客 3113

JAVA学习实战(一)登录拦截器实现以及注解LogRequired实现(内含拦截器 HandlerInterceptor 的详细讲解以及注解的具体实现方法)

前几天在学习一个网站项目的时候看到了Java的注解这个东西的实现感觉挺有意思的,想结合项目进行一个简单的讲解,希望能够帮助自己复习巩固一遍,同时也能够帮助更多学习过的人 如图,上面是一个注解的实现,其实实现方法很简单,只需要加上@interface即可 @interface用来定义一个自定义注解 在Java中,定义注解其实和定义接口很相似, 如上图所示,即定义了一个注解LogRequired ,那么如果我们想要给注解中传入某些值其实也很简单,只需要如下定义 这样如果要使用时,只需要@LogRequired(

xiaocaij_icai的博客 2040

Spring自定义注解实现HandlerInterceptorAdapter 拦截请求

注解类UnLoginAccessAnnotation.java import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy;...

DavidSoCool的博客 1683

java注解开发--springmvc拦截器

一、java 注解开发 1、定义   注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。   java总共有三种内置注解: @Override,它的作用是对覆盖超类中方法的方法进行标记,如果被标记的方法并没有实际覆...

窃格拉瓦 3717
上一篇: 消息中间件activeMQ
下一篇: 二维码的生成与解析
JavaMrSun
博客等级 码龄9年 27粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值