对于springmvc,有两种方式配置拦截器。

一是实现HandlerInterceptor接口,如

public class MyInterceptor1 implements HandlerInterceptor {
//该方法在action执行前执行,可以实现对数据的预处理,
// 比如:编码、安全控制等。如果方法返回true,则继续执行action。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
Exception {
System.out.println("MyInterceptor1 action之前执行!!!");
return true; //继续执行action
}

////该方法在action执行后,生成视图前执行。在这里,我们有机会修改视图层数据。
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView
modelAndView) throws Exception {
System.out.println("MyInterceptor1 action执行之后,生成视图之前执行!!");
}

//最后执行,通常用于释放资源,处理异常。我们可以根据ex是否为空,来进行相关的异常处理。
//因为我们在平时处理异常时,都是从底层向上抛出异常,最后到了spring框架从而到了这个方法中。
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("MyInterceptor1 最后执行!!!一般用于释放资源!!");
}
}

二是extendsHandlerInterceptorAdapter类,如

public class MyInterceptor2 extends HandlerInterceptorAdapter{

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
Exception {
System.out.println("MyInterceptor2.preHandle()");
return true; //继续执行action
}
}
对于控制器url的拦截,分为如下3种情况:

1. 拦截所有的url

<mvc:interceptor>
<mvc:mapping path="/**"/>
<!--这样配置,将拦截所有springmvc的url-->
<bean class="interceptor.MyInterceptor1">

</bean>
</mvc:interceptor>
2. 对于所有的url,拦截指定url,其余放行

<!--配置拦截器-->
<!--这样配置,将拦截访问springmvc指定路径下的url-->
<mvc:interceptor>
<mvc:mapping path="/emp/*"/>
<bean class="interceptor.MyInterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>
3. 对于所有的url,exceptUrls外放行

比如我们常见的LoginInterceptor

方法:在拦截器里注入一个属性List<String> exceptUrls

<!--配置拦截器 拦截除了exceptUrls内的所有请求-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="common.interceptor.LoginInterceptor">
<property name="exceptUrls">
<list>
<value>/user/login</value>
<value>/user/register</value>
</list>
</property>
</bean>
</mvc:interceptor>
</mvc:interceptors>
LoginInterceptor类

public class LoginInterceptor extends HandlerInterceptorAdapter {

private List<String> exceptUrls;

public List<String> getExceptUrls() {
return exceptUrls;
}

public void setExceptUrls(List<String> exceptUrls) {
this.exceptUrls = exceptUrls;
}

//执行action之前来执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
Exception {

String requestUri = request.getRequestURI();
if(requestUri.startsWith(request.getContextPath())){
requestUri = requestUri.substring(request.getContextPath().length(), requestUri.length());
}
//系统根目录
if (StringUtils.equals("/",requestUri)) {
return true;
}
//放行exceptUrls中配置的url
for (String url:exceptUrls
) {
if(url.endsWith("/**")){
if (requestUri.startsWith(url.substring(0, url.length() - 3))) {
return true;
}
} else if (requestUri.startsWith(url)) {
return true;
}
}
//其他需要登录后才能进行访问的url
String sessionid = request.getSession().getId();
UserSessionStatus status = SessionManager.getStatus(sessionid);

//如果没有登录
if(null==status){ 
//返回到登录页面 
return false;
}else{
return true;
}
}
}

springmvc中拦截器配置格式的更多相关文章

  1. SSM-SpringMVC-33:SpringMVC中拦截器Interceptor讲解

     ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 拦截器Interceptor: 对处理方法进行双向的拦截,可以对其做日志记录等 我选择的是实现Handler ...

  2. springmvc中拦截器与springmvc全局异常处理器的问题

    最近在做一个练手的小项目, 系统架构中用了springmvc的全局异常处理器, 做了系统的统一异常处理. 后来加入了springmvc的拦截器, 为了一些需求, 在拦截器中的 preHandle 方法 ...

  3. springmvc中拦截器的定义和配置

    package com.hope.interceptor;import org.springframework.lang.Nullable;import org.springframework.web ...

  4. SpringMVC中拦截器的使用

    什么是拦截器 拦截器通常一般指的是通过拦截从浏览器发往服务器的一些请求来完成某些功能的一段程序代码一般在一个请求发生之前,发生时,发生后我们都可以对请求进行拦截 拦截器可以做什么 拦截器可以用于权限验 ...

  5. spring mvc中拦截器配置mvc:interceptors

    其实在mvc:interceptors标签中,有两种类型的配置,一种直接配置一个bean(bean和ref归为一类),另一种还要配置上拦截的路径和排除的路径.直接配置的bean那就代表对所有的请求进行 ...

  6. springmvc以及springboot中的拦截器配置

    拦截器两种实现   如果不同的controller中都需要拦截器,不能使用相同的拦截器,因为拦截器不能跨controller,这个时候只能为不同的controller配置不同的拦截器,每一个拦截器只能 ...

  7. SpringMVC利用拦截器防止SQL注入

    引言 随着互联网的发展,人们在享受互联网带来的便捷的服务的时候,也面临着个人的隐私泄漏的问题.小到一个拥有用户系统的小型论坛,大到各个大型的银行机构,互联网安全问题都显得格外重要.而这些网站的背后,则 ...

  8. SpringMVC学习--拦截器

    简介 Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理. 拦截器定义 定义拦截器,实现HandlerInterceptor接 ...

  9. SpringMVC经典系列-14自己定义SpringMVC的拦截器---【LinusZhu】

    注意:此文章是个人原创.希望有转载须要的朋友们标明文章出处.假设各位朋友们认为写的还好,就给个赞哈.你的鼓舞是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linusz ...

随机推荐

  1. 【Pytest】python单元测试框架pytest简介

    1.Pytest介绍 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高.根据pytest的官方网站介绍 ...

  2. 【数据库】一篇文章搞掂:Oracle数据库

    PL/SQL的使用 1.安装使用 1.1.安装暂略 1.2.使用 添加环境变量 打开PL/SQL,不要登录,进入界面后,打开设置Preference 设置主目录和OCI库

  3. C++ 拷贝构造函数与赋值函数的区别(很严谨和全面)

    这里我们用类String 来介绍这两个函数: 拷贝构造函数是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用.当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式 ...

  4. install mysql firewall

  5. 穿戴-智能穿戴-ProjectGlass:谷歌眼镜(Google Project Glass)

    ylbtech-穿戴-智能穿戴-ProjectGlass:谷歌眼镜(Google Project Glass) 谷歌眼镜(Google Project Glass)是由谷歌公司于2012年4月发布的一 ...

  6. 简单了解winform

    WinForm是·Net开发平台中对Windows Form的一种称谓. Windows窗体可用于设计窗体和可视控件,以创建丰富的基于Windows的窗体应用程序.可以访问数据库中的数据,并在窗体上显 ...

  7. Step-by-step from Markov Process to Markov Decision Process

    In this post, I will illustrate Markov Property, Markov Reward Process and finally Markov Decision P ...

  8. Git013--多人协作

    Git--多人协作 本文来自于:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ ...

  9. 云计算+区块链=BaaS

    云计算+区块链=BaaS 本文来自于:https://www.toutiao.com/i6540096399017509389/ 云计算和区块链的区别 云计算现在已经是一个成熟的技术和应用了,美国国家 ...

  10. openssl使用

    一. 加密方法 dsaffdfd fgggg 1.对称加密: 加密算法 + 口令 加密算法: DES(56bits),3DES(用des加密反复加密三次),AES(128bits),Blowfish ...