温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2022-03-01 13:54:45 来源:亿速云 阅读:235 作者:iii 栏目:开发技术

本篇内容介绍了“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、配置拦截器

<!--拦截器配置-->	<mvc:interceptors>	<!--后台访问拦截器-->	<mvc:interceptor>	<!--拦截所有资源-->	<mvc:mapping path="/**"/>	<!--登陆不拦截-->	<mvc:exclude-mapping path="/user/login"/>	<!--邮箱激活不拦截-->	<mvc:exclude-mapping path="/user/activeEmail"/>	<!--静态资源的目录不拦截-->	<mvc:exclude-mapping path="/commons/**"/>	<!--用户通过邮箱中重置密码的链接不拦截-->	<mvc:exclude-mapping path="/email/resetPassword"/>	<!--激活邮箱的验证不拦截-->	<mvc:exclude-mapping path="/user/validateCode"/>	<!--实现拦截功能的类-->	<bean class="com.ssm.Interceptor.LoginInterceptor"></bean>	</mvc:interceptor>	</mvc:interceptors>

由于配置了<mvc:mapping path="/**"/>会拦截所有资源,我们必须用<mvc:exclude-mapping path="/这里写你想放行的请求">标签放行静态资源和一些不用拦截的请求(登录等等)。<bean class="com.ssm.Interceptor.LoginInterceptor"></bean>是第一步创建的拦截器。

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

<!--使用过滤器实现登陆控制-->   <!--filter标签用于声明过滤器对象-->   <filter>     <!--过滤器名称-->     <filter-name>LoginFilter</filter-name>     <!--过滤器完整类名-->     <filter-class>com.ssm.Filter.LoginFilter</filter-class>   </filter>   <!--filter-mapping用于创建过滤器的映射,指定Web应用中,哪些URL应用哪一个过滤器进行处理-->   <filter-mapping>     <filter-name>LoginFilter</filter-name>     <!--url-pattern用于指定过滤器应用的URL-->     <!--过滤的页面(自定义),这里对登录界面就不要过滤了-->     <url-pattern>/views/*</url-pattern>   </filter-mapping>

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

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ssm
AI