1. > 电脑手机 >

springboot过滤器 springboot过滤器原理

Spring Boot-Filter过滤器使用

1、基础准备

2、编写Filter

此处我们重点关注 doFilter方法 ,编写实现类重写该方法。

Ⅰ 在自定义Filter实现类上使用@WebFilter注解;

Ⅱ 自定义filterName(随意,不要与其他Filter重复即可);

Ⅲ 定义urlPatterns此处设置为"/*",表示拦截所有请求;

Ⅰ 将传入的 request 与 response 对象转换为 Http类型 ;

Ⅱ 自定义不需要处理的URI数组

Ⅲ 获取请求URI

Ⅳ 判断本次请求

封装checkURI方法,如下:

a、注入PATH_MATCHER,用于路径比较,如下:

b、方法体,如下:

Ⅴ 不需要拦截,则直接放行

Ⅵ 其余路径,判断登录状态

a、已登录,则放行

BaseContext是自定义存储线程userId的类

b、未登录,拦截

自定义常量

拦截,此处使用response向前端返回响应数据R.error(NOT_LOGIN)

3、扫描Filter

在启动类上添加 @ServletComponentScan注解 ,用于扫描 @WebFilter 注解 ,如下:

4、测试

编写Controller类,启动测试。

以上即为Filter基础使用的内容,感谢阅读。

「干货」SpringBoot+SpringSecurity+Jwt权限认证-认证

启动项目时,SpringBoot自动检索所有带@Configuration的注解,所以就将我们的WebSecurityConfig给加载了,这个config中,我们需要在configure(AuthenticationManagerBuilder auth)方法中注册一个继承自UserDetailsService的接口,这个接口中只有一个方法,那就是使用username获取到数据库中用户信息并返回成UserDetail实体。这个方法需要我们按照我们的不同业务场景重写

WebSecurityConfig

MyUserDetailsService

其实如果去掉上面的将自定义的JWT过滤器加入到过滤链中的话,这个认证过程已经完成了。使用下面的代码就可以调用起整个认证程序。

核心代码

这一行就会将username和password放到认证程序中进行认证。

也就是需要我们自己的逻辑让他去触发这个代码的实现。就可以自动完成认证程序了。就会触发使用username获取到数据库用户信息,然后经过密码加密比对之后会将认证结果返回。

我们整合JWT其实也很简单,其实就是将JWT的登录部分的操作,使用过滤器封装,将该过滤器放到整个认证的过滤链中

SpringSecurity过滤器的配置无非以下几个条件

先解决逻辑上以上三个问题的答案

针对以上解答,下面用代码来做展示(ps:序号依次对应上面)

完成了以上的配置,前台就可以使用/login/user来进行登录操作了。登录成功会返回一个JSON对象来供前端判断成功与否

全部代码奉上,随意写的注释有点多,不看的可以给删掉

SpringBoot系列:4.session和鉴权—过滤器和拦截器

本文主要介绍下,SpringBoot的web项目中,

使用redis保存并共享session,可以实现集群内的登录信息共享。SpringBoot项目中,通过在 application.yml 增加redis的配置,即可实现对session的存储和修改。

那么session是在何时被处理的?session的key又是如何生成的呢?这里实际使用了web项目中的过滤器。

在SpringBoot的web项目中,启动的tomcat在处理http请求时,有一个很重要的类: ApplicationFilterChain 。每个http请求在处理时都会通过这个类。这个类负责按顺序处理全部已注册的 Filter ,也就是过滤器。通过实现tomcat中的 Filter 接口,就可以定义一个过滤器。

在SpringBoot中的web项目中,有几个默认的过滤器,其中一个就是用来处理session的: SessionRepositoryFilter

SessionRepositoryFilter 主要的成员是两个接口,都有多个可选的实现类,通过这两个成员就实现了对session的解析。

当然也可以实现一个自己的过滤器,主要有两种方式:

下面我们使用第一种方式实现一个限制指定IP的过滤器:

通过过滤器解析session后,就可以根据session中保存的内容,判断当前登录的用户权限。

这里是通过一个拦截器实现的,在拦截器中可以直接通过 HttpServletRequest.getSession() 方法直接获取session的信息。

一个简单的拦截器实现如下:

定义之后要注册到处理流程中:

先来看下过滤器和拦截器的执行顺序,通过debug得到的执行顺序如下图:

在大部分场景中,过滤器和拦截器都是可互换的,使用哪个都可以。

过滤器和拦截器也有些区别,这里不谈实现和规范的差异,就说下使用中可能涉及的区别:

最后对于过滤器和拦截器的应用场景,说下个人的总结。基于执行顺序,方法参数和SpringBoot中的一些实现类来看。

以上内容属个人学习总结,如有不当之处,欢迎在评论中指正

SpringBoot 手写过滤器&加载第三方过滤器

他们三个各有优缺点,需要根据自己的业务需求来选择最适合的拦截机制。

好了下面开始正文。

好了,开始正文。

特别容易,继承Filter ,然后根据需求重写它的三个方法。

其中 init方法是初始化方法,最先执行。

然后执行doFilter方法,熟悉servlet的应该都知道,它其实就是调用业务。

最后destroy方法,是最后执行的。

然后我们启动服务,随便调用一个controller,控制台打印如下:

一般在开发的时候,我们可能用到第三方的过滤器,我们不可能在其源码上添加 @Component 注解。所以我们必须写一个配置类来引入它。

下面我们把上面的例子当作第三方过滤器,把TimeFilter类上面的@Component注解去掉。做一个模拟练习。

注意一定要去掉TimeFilter类上面的@Component注解,否则过滤器会失效。

SpringCloud

springboot

nginx

redis

Java NIO教程

Java reflection 反射详解

Java并发学习笔录

Java Servlet教程

jdbc组件详解

Java NIO教程

Java语言/版本 研究

Spring Boot 在升级到 2.4 的时候 EnableResourceServer 提示将会丢弃

在升级 Spring Boot 从 2.3.3 到 2.4 的时候提示:

@EnableResourceServer

将会被丢弃。

@EnableResourceServer开启资源服务配置,会配置资源服务相关的安全配置。

一个资源服务(可以和授权服务在同一个应用中,当然也可以分离开成为两个不同的应用程序)提供一些受token令牌保护的资源,Spring OAuth提供者是通过Spring Security authentication filter 即验证过滤器来实现的保护,你可以通过@EnableResourceServer注解到一个@Configuration配置类上,并且必须使用 ResourceServerConfigurer 这个配置对象来进行配置

Convenient annotation for OAuth2 Resource Servers, enabling a Spring Security filter that authenticates requests via an incoming OAuth2 token.

需要在升级的时候注意这个将要丢弃的版本。

springboot过滤器 springboot过滤器原理springboot过滤器 springboot过滤器原理


CAS-5.3单点登录/退出客户端搭建(Springboot)

使用Springboot搭建cas客户端,主要是配置四个过滤器和一个监听器。

用于过滤不需要登录的用户,需要实现UrlPatternMatcherStrategy 接口,在matches 函数里添加不需要用户登录的链接。

按照同样的方法实现客户端系统2。

启动cas服务器端和两个客户端。输入 ,则跳转到登录界面

单点退出,需要下面三个步骤:1、添加过滤器类,过滤掉不需要登录的url;2、添加退出跳转的控制器;3、修改服务端application.properties ,加cas.logout.followServiceRedirects=true,让客户端可以自己制定退出的路径,否则会走默认退出路径。

过滤器类需要实现UrlPatternMatcherStrategy接口,然后配置到springboot中,请参考 单点登录 的 创建过滤器类 和 配置过滤器到springboot 。

退出的方式有两种,一种是走默认的路径,另一种是走自定义的返回路径。请参考 单点登录 的 用户退出控制器 。

将上面的内容添加到applicaiton.properties, 这样就可以允许客户端定制自己的退出路径了。

http协议配置:cas 5.3.x默认客户端不支持http协议, 如果不进行配置,则会出现“未认证授权的服务”错误。

要配置兼容http协议,需要在HTTPSandIMAPS-10000001.json文件中添加http。

45. 从零开始学springboot撸一个Xss过滤器-注解实现

上章通过Filter实现了Xss全局过滤器

可能小伙伴还有点不满, 全局意味着“一刀切”,

虽然我们也有白名单黑名单设置, 但是, 白名单黑名单针对的是整个方法或整个实体类

举个例子, 我定义了个实体

可能业务上有限制(比如name限制了只有5个字符长),

那么name其实不可能存在Xss注入风险了,

程序只需要对info和des属性做转义即可

如果采用Filter, 意味着People的所有属性都会检测转义, 好像没啥必要!

那么, 可以针对性的指定字段进行Xss的过滤转义么?

为了应对这样的需求, 咸鱼君采用Aop注解来实现这么个Xss过滤器.

PS: 和Filter一样, 我们统一对入参Xss过滤, 确保参数的处理方式统一! 所以, 程序中获取的参数值都是转义后的数据!!

废话不多说, 往下看!

加入必要的pom依赖

针对方法, 参数, 属性分别定义三个注解

XssMethod

XssParam

XssField

针对注解实现切面Aspect

XssAspect

注释写的很详细, 就不多废话了!

接下来我们写个案例来测试测试

首先在启动类上启用切面

定义一个实体People, 并对info,des属性加上注解进行xss过滤

最后编写controller

json方式

键值对方式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, website.service08@gmail.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息