首页 >> 大全

web中的拦截器

2023-09-12 大全 24 作者:考证青年

拦截过滤

过滤器它是的三大组件之一。三大组件分别是: 程序、 监听器、 过滤器

过滤器它是的规范。也就是接口

过滤器它的作用是:拦截请求,过滤响应

的工作流程图

过滤器的使用

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

在方法中写功能需求

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

创建拦截器

实现接口

import java.util.logging.Filter;
/*** @author Huiex on 2021/11/8*/
public class AdminFilter implements Filter {//doFilter 方法,专门用于拦截请求。可以做权限检查----------@Overridepublic 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-name>AdminFilterfilter-name><filter-class>com.atguigu.filter.AdminFilterfilter-class>
filter>
<filter-mapping><filter-name>AdminFilterfilter-name><url-pattern>/admin/*url-pattern>filter-mapping>

的生命周期

的生命周期包含几个方法

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

. () 方法的作用

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

执行目标资源(没有)

流程图

拦截器中的异常如何处理__拦截器中定义了哪些方法

多个过滤器执行的特点

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

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

的拦截路径

精确匹配

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

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

目录匹配

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

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

后缀名匹配

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

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

MVC拦截器

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

区别

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

过滤器

拦截器

MVC拦截器的使用

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

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("------------清理------------");}
}

(安全)

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

是针对项目的安全框架,也是 Boot底层安全模块默认的技术选型,他可以实现强大

拦截器中定义了哪些方法__拦截器中的异常如何处理

的Web安全控制,对于安全控制,我们仅需要引入-boot--模块,进行少量的配置,即可实

现强大的安全管理

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

“认证”()

"授权”()

相关类 依赖

        <dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-securityartifactId>dependency>

拦截器

在包下

继承

@EnableWebSecurity--------------
public class SecurityConfig extends WebSecurityConfigurerAdapter {//重写  configure(HttpSecurity http)  固定的-----------------------@Overrideprotected 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 	 起作用

认证

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

在包下的类中

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected 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.on() 身份验证 如果是通过jdbc验证,那么用auth.()

密码加密

不加密的话会报 500 错误

    @Overrideprotected 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.shirogroupId><artifactId>shiro-coreartifactId><version>1.4.1version>dependency>log4j<dependency><groupId>org.slf4jgroupId><artifactId>jcl-over-slf4jartifactId><version>1.5.6version>dependency><dependency><groupId>org.slf4jgroupId><artifactId>slf4j-log4j12artifactId><version>1.7.21version>dependency><dependency><groupId>log4jgroupId><artifactId>log4jartifactId><version>1.2.12version>dependency>

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了