千家信息网

SSM项目中怎么使用拦截器和过滤器

发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,本篇内容介绍了"SSM项目中怎么使用拦截器和过滤器"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、
千家信息网最后更新 2024年11月14日SSM项目中怎么使用拦截器和过滤器

本篇内容介绍了"SSM项目中怎么使用拦截器和过滤器"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、拦截器概述

Spring MVC 也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定 的功能,自定义的拦截器必须实现 HandlerInterceptor 接口

  • preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求 request 进行处理。如果程序员决定该拦截器对请求进行拦截处理后还要调用其他 的拦截器,或者是业务处理器去进行处理,则返回 true;如果程序员决定不需要 再调用其他的组件去处理请求,则返回 false。

  • postHandle():这个方法在业务处理器处理完请求后,但是 DispatcherServlet向客户端返回响应前被调用,在该方法中对用户请求 request 进行处理。

  • afterCompletion():这个方法在 DispatcherServlet 完全处理完请求后被调用,可以 在该方法中进行一些资源清理的操作。

二、拦截器配置步骤

1、创建一个拦截器(实现HandlerInterceptor接口)

package com.ssm.Interceptor;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;//拦截器public class LoginInterceptor implements HandlerInterceptor {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        //获取请求的URL        String requestURI=request.getRequestURI();        HttpSession session=request.getSession();        Object userInfo=request.getSession().getAttribute("USERINFO");        System.out.println("链接:"+requestURI+"进入拦截器");        if(userInfo==null){ //表示未登录就想进入系统            //直接重定向到登录界面            String serverPath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/index.jsp";            response.sendRedirect(serverPath);            return false;        }else{            //登陆成功,不拦截            return true;        }    }    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {        System.out.println("跳转后拦截");    }    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {        System.out.println("渲染后拦截");    }}

这个拦截器我只是写个Demo,所以只进行了是否登录的验证,真正的项目中你也可以在这里进行一些权限的判断等等。

2、配置拦截器

                                                                                                                                                                                                                                                                                                                                                                                                                

由于配置了会拦截所有资源,我们必须用标签放行静态资源和一些不用拦截的请求(登录等等)。是第一步创建的拦截器。

3、测试下拦截器:

在地址栏输入个非法的请求试试

通过地址栏可以看到,页面已经被重定向到了登陆界面,拦截成功。
但是拦截器并不能拦截jsp页面的访问,这个时候两种选择:
1、将所有jsp页面都放在WEB-INF目录下
2、用Servlet过滤器(虽然感觉技术有点老了)

三、过滤器概述

Servlet过滤器主要用于对客户端(浏览器)的请求进行过滤处理,然后将过滤后的请求转交给下一资源。

四、过滤器配置步骤

1、创建一个过滤器(实现Filter接口)

package com.ssm.Filter;import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;//自定义过滤器public class LoginFilter implements Filter {    //初始化方法    @Override    public void init(FilterConfig filterConfig) throws ServletException {     //初始化处理        System.out.println("过滤器初始化");    }    @Override    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {        //过滤处理        //servletRequest 是个接口,HttpServletRequest 是实现,但是有些方法是HttpServletRequest独有的,如:getSession        //HttpServletRequest接口是继承servletRequest接口,增加了和http相关的方法        HttpServletRequest request= (HttpServletRequest) servletRequest;        HttpServletResponse response= (HttpServletResponse) servletResponse;//        String requestURI=request.getRequestURI();//        System.out.println("链接:"+requestURI+"进入过滤器");        HttpSession session=request.getSession();        if(session.getAttribute("USERINFO")==null){            //非法请求,直接跳转到登陆界面            String serverPath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/index.jsp";            response.sendRedirect(serverPath);        }else{            //正常登录,放行            filterChain.doFilter(request,response);        }    }    @Override    public void destroy() {     //释放资源        System.out.println("过滤器销毁");    }}

2、配置web.xml

            LoginFilter        com.ssm.Filter.LoginFilter          LoginFilter            /views/*  

各个标签的解释都写在注释里面了,至于需要过滤的资源,你可以根据自己的需求再添加,我主要是想把views目录下面的jsp全部过滤。

"SSM项目中怎么使用拦截器和过滤器"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

拦截器 处理 过滤器 方法 接口 资源 登录 配置 项目 业务 处理器 用户 界面 页面 登陆 成功 内容 地址 客户 客户端 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 佛山自主可控软件开发供应商 网络安全开展活动记录 网络安全要懂英语与数学 it软件开发公司创业 如何查服务器是否是主备模式 数据网络安全基础知识 广州商务通网络技术董事长 软件开发 自主 温州工业软件开发流程八个步骤 校园网组建采用的网络技术 switch服务器发生故障怎么处理 mirna生存分析数据库 输入网络安全密钥后提示受限 北京科技大学学位论文数据库 南宁哪里有做网络安全专业的 上海网络技术服务是什么 维普数据库属于全文数据库吗 网络安全典型案例2022年 分布式数据库扩展性测试 软件开发联系方式 软件开发专科投本科岗位 记一次网络安全教育活动 上海品牌软件开发销售电话 fpga软件开发过程 千万级数据库优化 数据库原理及应用实验2 服务器给别人公司管理安全吗 sql数据库基础掌握 国家网络安全实施攻略 搜搜搜网络技术搜搜在线
0