web中的拦截器

JavaWeb三大组件之一Filter(过滤器) 拦截所有访问web资源的请求或者响应(servlet、Jsp页面、HTML页面),从而实现我们自己的业务逻辑,这些逻辑可以是实现访问权限的控制、过滤敏感词、压缩响应等功能。过滤器是"链接"在容器的处理过程中的,它会在servlet处理器之前访问进入的请求,并且在响应信息返回客服端之前访问这些响应信息。这样就可以动态的修改请求和响应中的内容。创建web项目: 或者像这样建立web项目: 添加Tomcat服务器: 如果没有SmartTomcat,只有Tomcat像下面图片中这样: 则选择Tomcat里面的 阅读详情

拦截器

Filter过滤器

Filter过滤器它是JavaWeb的三大组件之一。三大组件分别是: Servlet 程序、Listener 监听器、Filter 过滤器
Filter过滤器它是JavaEE的规范。也就是接口
Filter过滤器它的作用是:拦截请求,过滤响应

Filter 的工作流程图

请添加图片描述

Filter 过滤器的使用

创建一个类实现Filter接口,实现接口方法

在doFilter方法中写功能需求

到 web.xml 中去配置 Filter 的拦截路径

创建拦截器

实现Filter接口

import java.util.logging.Filter;
/**
 * @author Huiex on 2021/11/8
 */
public class AdminFilter implements Filter {
    
	//doFilter 方法,专门用于拦截请求。可以做权限检查----------
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

功能需求

        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        HttpSession session = httpServletRequest.getSession();
        Object user = session.getAttribute("user");
	// 如果等于 null,说明还没有登录
        if (user == null) {      
            servletRequest.getRequestDispatcher("/login.jsp")
            				.forward(servletRequest,servletResponse);
            return;
        } else {
	// 让程序继续往下访问用户的目标资源
            filterChain.doFilter(servletRequest,servletResponse);
        }
    }
}

web.xml 中的配置

<!--filter 标签用于配置一个 Filter 过滤器-->
<filter>
												<!--给 filter 起一个别名-->
	<filter-name>AdminFilter</filter-name>
												<!--配置 filter 的全类名-->
	<filter-class>com.atguigu.filter.AdminFilter</filter-class>
</filter>

<!--filter-mapping 配置 Filter 过滤器的拦截路径-->
<filter-mapping>
								<!--filter-name 表示当前的拦截路径给哪个 filter 使用-->
	<filter-name>AdminFilter</filter-name>
					<!--url-pattern 配置拦截路径
					/ 表示请求地址为:http://ip:port/工程路径/ 映射到 IDEA 的 web 目录
					/ admin/* 表示请求地址为:http://ip:port/工程路径/admin/*-->
	<url-pattern>/admin/*</url-pattern>
    
</filter-mapping>

Filter的生命周期

Filter 的生命周期包含几个方法

  1. 构造器方法
  2. init 初始化方法 第 1,2 步,在 web 工程启动的时候执行(Filter 已经创建)
  3. doFilter 过滤方法 第 3 步,每次拦截到请求,就会执行
  4. destroy 销毁 第 4 步,停止 web 工程的时候,就会执行(停止 web 工程,也会销毁 Filter 过滤器)

FilterChain 过滤器链

FilterChain. doFilter() 方法的作用

执行下一个Filter过滤器(如果有Filter)

执行目标资源(没有Filter)

流程图

请添加图片描述

多个Filter过滤器执行的特点

多个Filter过滤器执行的时候,它们执行的优先顺序是由 他们在web. xmI中从上到下配置的顺序决定

多个Filter共同执行的时候,它们都使用同一个Request对象

Filter 的拦截路径

精确匹配

<url-pattern>/target.jsp</url-pattern>

以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/target.jsp

目录匹配

<url-pattern>/目录名/*</url-pattern>

以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/admin/*

后缀名匹配

<url-pattern>>*.html</url-pattern>

以上配置的路径,表示请求地址必须以.html 结尾才会拦截到

MVC拦截器

SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能

区别

**过滤器与拦截器的区别:**拦截器是AOP思想的具体应用。

过滤器

  • servlet规范中的一部分,任何java web工程都可以使用
  • 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截

拦截器

  • 拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用
  • 拦截器只会拦截访问的控制器方法, 如果访问的是jsp/html/css/image/js是不会进行拦截的

MVC拦截器的使用

创建一个类,实现HandlerInterceptor(处理程序拦截器)

package com.kuang.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor implements HandlerInterceptor {

   //在请求处理的方法之前执行
   //如果返回true执行下一个拦截器  相当于FiltenChain
   //如果返回false就不执行下一个拦截器
   public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
       System.out.println("------------处理前------------");
       return true;
  }

   //在请求处理方法执行之后执行
   public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
       System.out.println("------------处理后------------");
  }

   //在dispatcherServlet处理后执行,做清理工作.
   public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
       System.out.println("------------清理------------");
  }
}

SpringSecurity(安全)

在web开发中,需要过滤器,拦截器

Spring Security是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以实现强大
的Web安全控制,对于安全控制,我们仅需要引入spring-boot-starter-security模块,进行少量的配置,即可实
现强大的安全管理

Spring Security的两个主要目标是“认证"和"授权”(访问控制)。
“认证”(Authentication)
"授权”(Authorization)

相关类

  • WebSecurityConfigurerAdapter: 自定义Security策略
  • AuthenticationManagerBuilder: 自定义认证策略
  • @EnableWebSecurity: 开启WebSecurity模式

依赖

        <!--security-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

拦截器

在config包下

SecurityConfig类

继承WebSecurityConfigurerAdapter

@EnableWebSecurity--------------
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    //重写  configure(HttpSecurity http)  固定的-----------------------
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //首页所有人可以访问, 功能页只有对应有权限的人才能访问--------------
        http.authorizeRequests()
                .antMatchers("/").permitAll()//任何人都可以访问 /下的目录
                .antMatchers("/level1/**").hasRole("vip1")vip1才可以访问/level1/下的目录
                .antMatchers("/level2/**").hasRole("vip2")
                .antMatchers("/level3/**").hasRole("vip3");

         //如果没有权限 会默认自动跳转到默认登陆页面 "/login"
        http.formLogin().loginPage("/login");

        //注销 开启了注销功能  
        //默认跳转到注销页面"/logout"  加上.logoutSuccessUrl()后可以指定跳转的页面
        http.logout().logoutSuccessUrl("/");

        //开启记住我功能
        http.rememberMe();

    }
"/"所有页面所有都能访问
 "/level1/**" 该页面只有"vip1"能访问(起作用)
 
Matchers	 匹配器
permitAll 	 运行所有
hasRole 	 起作用

认证

通过从内存或者数据库中得到用户信息,通过认证得到对应的权限级别

在config包下的SecurityConfig类中

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//        //这些数据正常应该从数据库中读
        auth.inMemoryAuthentication()
                .withUser("zjl").password("183303").roles("vip3")
                .and()//and() 用来拼接    			  roler() 角色
                .withUser("root").password("123456").roles("vip1","vip2","vip3");
    }
}

//通过认证后, root这个用户可以访问vip1、2、3 , zjl用户只,能访问vip3

//一般用户的roles是在数据库中得到的,或者从内存中得到,这里没有,就直接设置了

auth.inMemoryAuthentication() 身份验证 如果是通过jdbc验证,那么用auth.jdbcAuthentication()

密码加密

不加密的话会报 500 错误

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
		        auth.inMemoryAuthentication()
                    .passwordEncoder(new BCryptPasswordEncoder())//---------
                .withUser("zjl").password(new BCryptPasswordEncoder().//---------
                encode("183303")).roles("vip3")
                .and()
                .withUser("root").password(new BCryptPasswordEncoder().
                encode("123456")).roles("vip1","vip2","vip3");
    }
}

shrio

依赖

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.4.1</version>
        </dependency>
		
		log4j
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.5.6</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.21</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
【JavaWeb开发必备】过滤器和拦截器的功能特性及应用场景 在JavaWeb开发中,过滤器(Filter)和拦截器(Interceptor)是非常重要的组件,它们可以对请求进行预处理和后处理,从而实现对请求的控制和管理。过滤器和拦截器都可以对请求进行预处理和后处理,但过滤器更加适合对请求进行过滤和修改,而拦截器更加适合对请求进行拦截和处理。过滤器的应用场景示例:对请求进行过滤和修改,如对请求进行字符编码转换、对请求进行安全验证等。拦截器的应用场景示例:对请求进行拦截和处理,如对请求进行权限验证、对请求进行日志记录等。过滤器可以对请求进行修改,从而实现对请求的增强。 阅读详情

相关推荐

Java Web拦截器实战:深入理解与应用

在本章节中,我们将探索创建自定义拦截器的实际步骤。自定义拦截器可以用于多种场景,如日志记录、权限检查、性能监控等。理解拦截器的生命周期、配置方法以及它们是如何与业务逻辑关联起来的,对于开发高效、可维护的Web应用至关重要。创建自定义拦截器通常涉及以下步骤:首先,你需要定义一个实现了特定拦截器接口的类,这通常依赖于你使用的框架。例如,在Spring框架中,你通常需要实现接口。// 实现方法@Override// 方法逻辑@Override// 方法逻辑@Override。

weixin_36282234的博客 1110

web开发中拦截器和过滤器的作用和区别-附上代码示例

Web开发中,拦截器(Interceptor)和过滤器(Filter)都是常用的组件,它们可以对HTTP请求进行预处理、后处理以及一些额外的操作。在这篇文章中,我们将详细讲述拦截器和过滤器的作用和区别,并使用Java代码举例说明它们的使用。一、拦截器和过滤器的作用二、拦截器和过滤器的区别范围不同拦截器是针对具体的某个请求进行的处理,比如处理SpringMVC框架下的请求。而过滤器则作用于整个应用程序,通过匹配URL路径来确定是否需要过滤该请求。执行顺序不同。

专注后端开发 1981

audio框架学习-Audio_Flinger分析

文章目录一、代码位置二、audio服务启动2.1 main服务2.2 audioflinger添加到系统服务中2.3 audioflinger的对外接口 之前记录过audioTrack的笔记,这次继续参考audioFlinger相关的代码并做笔记; 参考文档:https://www.cnblogs.com/innost/archive/2011/01/15/1936425.html和https://blog.youkuaiyun.com/zyuanyun/article/details/60890534?spm=100

永不秃头的程序员的博客 2135

Java Web之拦截器Interceptor、过滤器Filter及监听器Listener

拦截器Interceptor:HandlerInterceptor、HandlerInterceptorAdapter被废弃、拦截器实战; 过滤器Filter:责任链模式,延迟加载过滤器,中文乱码过滤器; 监听器Listener:EventListener、三类监听器接口、配置监听器、监听器实战、监听器和事件驱动模型的区别; 拦截器和过滤器的区别、过滤器和监听器的区别;

lonelymanontheway的博客 3291

Tessent_StdcellLib

第二种为 Tessent Cell lib,既可用于功能仿真,也可以用于测试逻辑插入。lib包含了用于仿真的功能信息,也包含DFT cell属性。如何使用tessent工具将stdcell verilog 仿真模型转换为tessent自己的lib。运行后工具会生成一个atpg的lib文件,打开文件,找到一个带SI的DFF,只有功能描述。tessnt lib分为两种,第一种为ATBG lib,可以用于仿真;打开生成的lib文件,多了dft_cell_selection。第二部:编写attributes文件。

qq_40411444的博客 2134

麒麟V10 ARM环境离线部署MySQL:从依赖缺失到服务自启的完整避坑指南

本文详细介绍了在麒麟V10 ARM环境下离线部署MySQL的完整流程,包括依赖缺失解决方案、目录配置、服务自启设置及性能调优。特别针对国产操作系统和ARM架构的兼容性问题,提供了实用的避坑指南和优化建议,帮助用户高效完成MySQL部署与维护。

weixin_28741413的博客 409

JavaWeb-拦截器

拦截器的使用

wwl193206126的博客 308

faster lio 回环 加入GTSAM优化的记录

对Faster lio 加入回环、gtsam优化,在室外建图遇到的问题和过程

Nico_jion的博客 2599

Java Web中的拦截器、过滤器及监听器

一般情况下,HttpSessionActivationListener和HttpSessionBindingListener一起使用,这两个监听器比较特殊,实现这两个接口的类不需要在web.xml中进行注册,被钝化的JavaBean对象会被持久化到存储设备中,活化的JavaBean对象会被从存储设备中恢复,前提是该JavaBean对象实现Serializable接口。可以控制请求的控制器和方法,但控制不了请求方法里的参数(用于处理页面提交的请求响应并进行处理,如国际化,主题更换,过滤等)。

gghhb12的博客 1318

微信小游戏审核避坑指南:如何一次性通过微信审核(附最新审核要求)

本文详细解析微信小游戏审核全流程,提供从开发到上线的关键策略,帮助开发者一次性通过审核。涵盖合规性自查、材料优化、开发环境配置、版本管理、审核材料填写技巧等核心内容,并附最新审核要求和常见驳回问题解决方案,显著提升审核通过率。

weixin_28454475的博客 1411

AI奶牛TMR智能饲喂机器人 Qt信创完整项目( 统信/麒麟国产系统直接编译)

内置**犊牛、育成牛、围产牛、泌乳牛、干奶牛**5套标准化饲喂配方;+" 饲喂批次完成|牛群:"+grpText+"|投喂饲料:"+QString::number(ft)+"吨|剩料:"+QString::number(st)+"吨|异常牛:"+QString::number(abCow);cv::putText(frame,"霉变变质饲料禁止饲喂",cv::Point(20,40),cv::FONT_HERSHEY_SIMPLEX,0.7,cv::Scalar(0,0,255),2);

寒寒豆豆软件公司的博客 183

java web拦截器配置_如何配置javaWeb日记拦截器Filter

如何配置javaWeb日记拦截器,jsp拦截器的实现,web.xml配置拦截器,Filter_Log.java文件实例,记录获取执行前的时间、获取访问的URI、根据执行前时间和执行后时间获取消耗的总时间,简单的Filter实例:Filter_Log.java文件源码:package com.cn.filter;import java.io.IOException;import javax.ser...

weixin_36163782的博客 628

Ollama系列---【ollama使用gpu运行大模型】

一、安装CudaToolkit 使用控制台命令查看当前显卡驱动中的cuda版本 nvidia-smi 二、下载CudaToolkit 注意:CudaToolkit版本要低于上面的显卡Cuda版本。 Cuda各版本下载地址:https://developer.nvidia.com/cuda-toolkit-archive 下载好之后,一路下一步,一直默认即可。 如果安装到了自定义的位置,记得加环...

-少年-的博客 7982

【SpringBoot3】SpringBoot项目Web拦截器使用

在Spring Boot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制。拦截器广泛应用于各种场景,以增强应用的功能性、安全性和可维护性。 在Spring Boot项目中实现Wen拦截器主要有以下几种方式 * 实现 `HandlerInterceptor` 接口 * 使用过滤器(`Filter`) * 使用 `@Aspect` 注解实现AOP拦截 这里主要介绍 `HandlerInterceptor` 接口 和 `Filter`

不积跬步无以至千里,不积小流无以成江海。一个喜欢学习分享的程序员 2114

Pytorch图像去噪实战(七):Noise2Noise自监督图像去噪实战,没有干净图也能训练模型

PyTorch图像去噪实战:Noise2Noise自监督去噪方法 本文介绍了在没有干净图像的情况下使用Noise2Noise方法进行图像去噪的实战方案。主要内容包括: 问题场景:真实项目中经常只有带噪图像而没有对应的干净图像,如夜间监控、医学影像等场景。 Noise2Noise核心思想:使用同一场景的两张不同噪声版本的图像进行训练(noisy_image_a → noisy_image_b),让模型学习恢复共同的干净结构而非随机噪声。 技术原理:模型通过最小化两个独立噪声图像之间的差异,最终会收敛到真实干净

ai技术增长的博客 501

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java web中的拦截器、过滤器和监听器

目录 介绍一下 过滤器实现 拦截器实现 Servlet监听器实现 介绍一下 1、过滤器和拦截器(只针对Servlet的Filter接口和SpringMVC的HandlerInterceptor接口,不针对其它实现方式,手撸服务器的大神再见) 过滤器和拦截器都是将客户端的请求进行拦截处理,然后将请求转交给下一资源。其处理方式如下图所示。 拦截器和过滤都能实现相同的功能,那么...

好记性不如烂笔头 723

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

使用CXF为Web Service添加拦截器,自定义拦截器

使用CXF为Web Service添加拦截器,自定义拦截器

hfrujhv的博客 323

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

web api添加拦截器

实现思路 1.标识控制器有拦截特性; 2.控制器拦截处理; 代码实现 1.标识控制器有拦截特性,代码: 1 2 3 4 5 [MyFilter] public string PostFindUser([FromBody]Userinfo user) {     return s

疯狂紫萧 3988

java web 过滤器跟拦截器的区别和使用

1、首先要明确什么是拦截器、什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。 在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执

qq_25843323的博客 3万+

SpringBoot-Web开发之拦截器

本文介绍了Spring MVC中自定义拦截器HandlerInterceptor的实现与配置流程。通过实现HandlerInterceptor接口,可以定义preHandle、postHandle和afterCompletion方法来控制请求处理前后的逻辑。示例中的LoginInterceptor实现了登录检查功能,未登录用户将被重定向到登录页。配置类通过实现WebMvcConfigurer接口,将拦截器注册到容器并指定拦截规则(/**)和排除路径(静态资源等)。文章还详细说明了拦截器的执行流程:顺序执行p

zl979899的博客 392

在web.xml中为Struts2配置拦截器

在web.xml中为Struts2配置拦截器           xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

sun_boy1的专栏 1736

Web中的监听器 过滤器 拦截器

public class MyFilter implements javax.servlet.Filter { 2 /** 3 * 初始化 4 */ 5 @Override 6 public void init(FilterConfig a...

chuteng3602的博客 98

1.服务端拦截器:发布Web Services,拦截器不能正常工作

服务端发布Web Services:   /** * */ package lee; import java.io.FileNotFoundException; import javax.xml.ws.Endpoint; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.int

1150

Java web登录拦截器_Java web servlet 拦截器 以登陆为例子

以登陆为例子...............public class LoginFilter implements Filter {@Overridepublic void destroy() {}@Overridepublic void init(FilterConfig arg0) throws ServletException {}@Overridepublic void doFilter(S...

weixin_36046776的博客 305

web.xml 加入中心拦截器

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

u013551536的博客 7183

[转载]web api添加拦截器

实现思路 1.标识控制器有拦截特性; 2.控制器拦截处理; 代码实现 1.标识控制器有拦截特性,代码: [MyFilter] public string PostFindUser([FromBody]Userinfo user) { return string.Format("{0}是好人~", user.Name); } 2.控制器拦截处理,代码...

163
上一篇: 19. 删除链表的倒数第 N 个结点
下一篇: Spring
Huiex胖子君
博客等级 码龄6年 3粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值