导航:首页 > 净水问答 > springaop过滤器

springaop过滤器

发布时间:2022-12-07 23:21:12

1. spring过滤器和拦截器的区别

(1)过滤器:

依赖于servlet容器,是JavaEE标准,是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等

关于过滤器的一些用法可以参考我写过的这些文章:

2. Spring filter和拦截器的区别和执行顺序

Filter的执行顺序跟你配置的执行顺序是一样的,执行的话要触发到才会执行啊
当然要是过滤/*就跟配置顺序一样了

3. SpringBoot 三种拦截http请求方式Filter,interceptor和aop

SpringBoot 三种拦截http请求方式Filter,interceptor和aop。

这三种拦截方式的拦截顺序是:filter—>Interceptor-->ControllerAdvice-->@Aspect -->Controller;

这三种方式的区别:
1.过滤器Filter可以拿到原始的HTTP请求和响应的信息, 但是拿不到你真正处理请求方法的信息,也就是方法的信息。
2.拦截器Interceptor可以拿到原始的HTTP请求和响应的信息,也可以拿到你真正处理请求方法的信息,但是拿不到传进参数的那个值。
3.切片Aspect,既然Spring那么支持AOP,可以拿到原始的HTTP请求和响应的信息, 也可以拿到你真正处理请求方法的信息,也可以传进参数的那个值。

实现Filter接口

实现 HandlerInterceptor 接口,然后配置进Spring。

配置进spring

pom.xml 添加Aop支持

4. Spring Cloud Security[微服务安全](一)初识Spring Cloud Security和OAuth2.0

在介绍Spring Cloud Security之前,我们先要介绍一下Spring Security。

Spring Security是一套提供了完整的声明式安全访问控制的解决方案。
Spring Security是基于Spring AOP和Servlet过滤器的,它只能服务基于Spring的应用程序。
除常规认证和授权外,它还提供 ACL,LDAP,JAAS,CAS 等高级安全特性以满足复杂环境中的安全需求。

(注:在Spring Security中,Authority和Permission是两个完全独立的概念,两者没有必然的联系。它们之前需要通过配置进行关联。)

安全方案的实现通常分为 认证(Authentication) 授权(Authorization) 两部分。

使用者可以使一个 用户 设备 ,和可以在应用程序中执行某种操作的 其它系统

认证一般通过用户名和密码的正确性校验来完成通过或拒绝。

Spring Security支持的主流认证如下:

Spring Security进行认证的步骤:
++++++++++++++++++++++++++++++++++++++++++++++++++++++
++ 1. 用户使用用户名和密码登陆
++
++ 2. 过滤器()获取到用户名
++    和密码,将它们封装成Authentication
++
++ 3. AuthenticationManager认证Token(由Authentication实现类传递)
++
++ 4. AuthenticationManager认证成功,返回一个封装了用户权限信息
++    的Authentication对象,包含用户的上下文信息(角色列表)
++
++ 5. 将Authentication对象赋值给当前的SecurityContext,建立这个用户
++ 的安全上下文( SecurityContextHolder.getContext.setAuthentication() )
++
++ 6. 当用户进行一些受到访问控制机制保护的操作,访问控制机制会依据
++    当前安全的上下文信息来检查这个操作所需的权限
++++++++++++++++++++++++++++++++++++++++++++++++++++++

Spring Security提供了一系列基本组件,如spring-security-acl, spring-security-cas, spring-security-oauth2等。
具体这里就不详述了,读者可以查看官网的介绍。

 

Spring Cloud Security是用于构建微服务系统架构下的安全的应用程序和服务,它可以轻松实现基于微服务架构的统一的安全认证与授权。

Spring Cloud Security相对于Spring Security整合了Zuul,Feign,而且更加完美地整合了OAuth2.0。

 

OAuth 2.0是用于授权的行业标准协议。

原理:
OAuth2是用户资源和第三方应用之间的一个中间层。
它把资源和第三方应用隔开,使得第三方应用无法直接访问资源,第三方应用要访问资源需要通过提供 凭证(Token) 来获得OAuth 2.0授权。

OAuth2的典型例子:

==============================================
== 微信公众号授权提醒
== 页面弹出一个提示框需要获取我们的个人信息
== 单击确定
== 第三方应用会获取我们在微信公众平台中的个人信息
==============================================

OAuth的关键角色:

在用户授权第三方获取私有资源后,第三方通过获取到的token等信息通过授权服务器认证,然后去资源服务器获取资源。

 

密码模式中,资源拥有者负责向客户端提供用户名和密码;
客户端根据用户名和密码箱认证服务器申请令牌,正确后认证服务器发放令牌。

客户端请求参数:

缺点:
用户对客户端高度可信,必须把自己的密码发给客户端,存在被黑客窃取的隐患(不推荐)。

在授权码模式中,客户端是通过其后台服务器与认证服务器进行交互的。

授权码模式的运行流程:

从以上图中我们可以看到客户端服务器和认证服务器需经过2次握手,客户端服务器才能拿到最终的访问和更新令牌。

客户端申请认证的参数:

 

服务器返回的参数:

 

客户端收到授权码以后,附上重定向URI,向认证服务器申请访问令牌。

客户端申请令牌的参数:

 

服务器返回的参数:

 

如果访问令牌已经过期,可以使用更新令牌申请一个新的访问令牌。

通过更新令牌申请访问令牌的参数:

这两种模式不常用,因此在这里就不多叙述了。

5. 如何理解spring中的切面和过滤

切面这个我的理解就是:以前开发都是从前台到service层再到domain层,spring中的切面就不再是一条线的开发方式,而是面向一个层,比如在配置事务的时候配置到service层,这就是切面的一个应用。过滤就是把提交的东西和展示到前台的东西筛选一遍,例如写一个编码的过滤器,在从前台想后台提交东西的时候,在到action之前,spring会把编码设置成你想设置的编码格式。

6. spring aop 可以捕获日志吗

在Java开发中日志的管理有很多种。我一般会使用过滤器,或者是spring的拦截器进行日志的处理。如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个方法的调用。然后进行日志记录。使用过滤器的好处是可以自己选择性的对某一些方法进行过滤,记录日志。但是实现起来有点麻烦。

另外一种就是使用Spring的AOP了。这种方式实现起来非常简单,只要配置一下配置文件就可以了。可是这种方式会拦截下所有的对action的每个操作。使得效率比较低。不过想做详细日志这个方法还是非常好的。下面我就介绍一下使用Spring
AOP进行日志记录的方式。

spring aop可以做日志管理

7. 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方式

键值对方式

https://github.com/MrCoderStack/SpringBootDemo/tree/master/sb-xssaop

8. Spring AOP中@Aspect拦截介绍(一)

本章介绍的@Aspect拦截用的非注解方式,而是通过切入点@Pointcut指定要拦截的目录,本章节实现了拦截请求和返参后对其进行修改,类似于过滤器的作用

User.java

AspectTestController.java

TestAspect.java

如果想要学习或者加上该封装结构,可以在笔者的项目笔记目录下寻找“项目返参结构封装”就可以直接复制了,当然也可以自己返回一个String或者Object类型先测试用着

本测试例子中已经把 @Before和@After和@AfterReturning注掉了,只使用的@Around,可以直接用postman调用测试的,测完还可以放开前面三个注解,再把@Around注掉再测就可以了。

无参的那个测试不能用@Around测试,想要用@Around测试需要改一下,@Around("pointCut() && args(arg)")改为@Around("pointCut() "),下面的入参和修改参数部分去掉即可

9. spring中过滤器(filter)、拦截器(interceptor)和切面(aop)的执行顺序

过滤器是服务端的一个组件,是基于servlet实现从客户端访问服务端web资源的一种拦截机制,对请求request和响应response都进行过滤,依赖于serverlet容器,使用时,实现Filter接口,在web.xml里配置对应的class还有mapping-url。

拦截器,顾名思义,它的作用就是拦截,这个要和过滤器区分开,过滤器依赖serverlet容器,获取request和response处理,是基于函数回调(框架本身调用的,它会遍历所有注册的过滤器,并且一一调用doFilter()),简单说就是“去取你想取的”。拦截器是通过Java反射机制来拦截web请求,是“拒你想拒绝的”,它只拦截web请求,但不拦截静态资源。

拦截器,在AOP中用于在某个方法或字段被访问之前,进行拦截,然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

相比过滤器,拦截器能够知道用户发出的请求最终被哪个控制器处理,但是拦截器还有一个明显的不足,即不能够获取request的参数以及控制器处理之后的response。(注意 ,我曾经试过,获得被拦截方法的一些参数,但是通过methodParaters无法获得,后来只能通过request.getParameter(..)来获取)所以就有了切片的用武之地了。

【Filter与Interceptor的区别】

【Interceptor 与spring AOP的区别】

10. spring过滤器和拦截器的区别和联系

1、首先要明确什么是拦截器、什么是过滤器
1.1 什么是拦截器:
拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。
谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts2中称为拦截器栈 Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
1.2. 拦截器的实现原理:
大部分时候,拦截器方法都是通过代理的方式来调用的。Struts2的拦截器实现相对简单。当请求到达Struts2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。
1.3 什么是过滤器
过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:
①以常规的方式调用资源(即,调用servlet或JSP页面)。
②利用修改过的请求信息调用资源。
③调用资源,但在发送响应到客户机前对其进行修改。
④阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。

1.4 Servlet过滤器的基本原理
在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。例如,某网站里有提交“修改的注册信息”的网页,当用户填写完修改信息并提交后,服务器在进行处理时需要做两项工作:判断客户端的会话是否有效;对提交的数据进行统一编码。这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。

2、拦截器与过滤器的区别 :
1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

拦截器的代码实现(以struts2为例):
1、在xml文件中如何定义拦截器
<interceptors>
<interceptor name="filterIPInterceptor"
class="com.xxxx.web.FilterIPActionInterceptor" />
<interceptor-stack name="filterIPStack">
<interceptor-ref name="defaultStack" />

<interceptor-ref name="filterIPInterceptor" />
</interceptor-stack>
</interceptors>

2、怎么遍别写自定义拦截器

public class FilterIPActionInterceptor extends AbstractInterceptor
{
/** 日志控制. */
private final Log log = LogFactory.getLog(getClass());

/**
* @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
*/
@Override
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation invocation) throws Exception
{
String result = null;
// 获得当前方法名.
String methodName = invocation.getInvocationContext().getName();
String currIp = null;
try
{
if (invocation.getAction() instanceof PortletAction)
{
PortletAction action = (PortletAction) invocation.getAction();
currIp = action.getRequest().getRemoteAddr();
}
String ip = ApplicationResource.getHotValue("ALLOW_CACHE_IP");

if (StringUtils.isBlank(ip) || StringUtils.isBlank(currIp))
{
log.error("允许刷新的IP不存在或当前请求的IP非法.");
throw new NoAllowIPException();
}
else
{
String[] ips = ip.split(",");
boolean errorIp = true;
for (String s : ips)
{
if (s.equals(currIp))
errorIp = false;
}
// 判断IP
if (errorIp)
throw new NoAllowIPException();
}
result = invocation.invoke();//调用被拦截的方法
}
catch (Exception e)
{
log.error("异常类名:" + invocation.getAction().getClass());
log.error("异常方法:" + methodName, e);
throw e;
}

return result;
}

}

3、怎么编写过滤器

1、在web.xml里面配置自定义的拦截器
<filter>
<filter-name>Redirect Filter</filter-name>
<filter-class>com.xx.filter.RedirectFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>Redirect Filter</filter-name>
<url-pattern>/xx/xx/*</url-pattern>

</filter-mapping>

2、如何编写自定义的拦截器
public class RedirectFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
// 获取URL
Long startTime = null;
if (log.isDebugEnabled())
{
startTime = System.currentTimeMillis();
}
HttpServletRequest httpRequest = (HttpServletRequest) request;
String url = httpRequest.getRequestURL().toString();
if (url == null || url.trim().length() == 0) {
return;
}
if (url.indexOf(luceneCreateMapping) != -1
|| url.indexOf(luceneSearchMapping) != -1) {
doFilterForxxx(request, response, url);
} else {
doxxxx(request, response, url);
}
if (log.isDebugEnabled())
{
long endTime = System.currentTimeMillis();
Thread currentThread = Thread.currentThread();
String threadName = currentThread.getName();
log.debug("[" + threadName + "]" + "< "
+ this.getClass().getName() + " " + url + " "
+ (endTime - startTime) + " ms");
}
// 激活下一个Filter
filterChain.doFilter(request, response);

}
}

阅读全文

与springaop过滤器相关的资料

热点内容
印染废水中cod排放量是多少 浏览:245
冷干机的滤芯如何拆下来 浏览:552
海尔净水器出水管接口怎么拆 浏览:13
河北水垢漏斗 浏览:689
白云区农村ppp污水项目 浏览:498
安吉尔水壶滤芯怎么拆 浏览:318
电厂化学废水调整及注意事项 浏览:892
什么叫纳米微晶技术净化器 浏览:43
百佳境界净水器如何 浏览:695
甲醇蒸馏塔再沸器的原理 浏览:268
ro膜氯化 浏览:984
洁厕灵能除垢 浏览:459
油烟机净化器的价格多少钱一台 浏览:334
净化器电源怎么测量 浏览:332
wq污水提升泵 浏览:415
污水处理50户需多少立方池 浏览:656
树脂是不是ab胶 浏览:694
减压蒸馏怎么拆 浏览:544
饮水机为什么加热一会就保温 浏览:287
电解法处理污水基于什么原理 浏览:229