服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SSM项目中使用拦截器和过滤器的实现示例

SSM项目中使用拦截器和过滤器的实现示例

2021-09-09 13:56别团等shy哥发育 Java教程

这篇文章主要介绍了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、测试下拦截器:

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

SSM项目中使用拦截器和过滤器的实现示例

SSM项目中使用拦截器和过滤器的实现示例

通过地址栏可以看到,页面已经被重定向到了登陆界面,拦截成功。
但是拦截器并不能拦截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全部过滤。

3、测试过滤器

不登陆直接访问后台jsp页面:

SSM项目中使用拦截器和过滤器的实现示例

访问之后:

SSM项目中使用拦截器和过滤器的实现示例

可以看到,过滤器直接将请求重定向到了登陆界面,过滤器过滤成功。

五、总结

现在已经有了很多权限管理的框架了,Shiro、Spring Security等等,以后尽量还是用新技术。

到此这篇关于SSM项目中使用拦截器和过滤器的文章就介绍到这了,更多相关SSM项目中使用拦截器和过滤器内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_43753724/article/details/115773211

延伸 · 阅读

精彩推荐
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7472021-02-04