对于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. The Factor

    The Factor Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  2. window.frames[iframe].document 在ie可以用,在360、火狐中都不兼容?

    <iframe id="myf" scrolling="auto" frameborder="0" src="" ...

  3. jacoco + ant远程统计(tomcat/spring boot)服务的代码覆盖率

    什么是Jacoco? Jacoco(java code coverage)是一个开源的Java代码覆盖率工具,Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件, ...

  4. jQuery file upload测试

    <input id="fileupload" type="file" name="files[]" data-url="Ha ...

  5. RequestBody 请求格式

    @RequestMapping("/CreateComment")@ResponseBodypublic String createQuestionComments(@Reques ...

  6. IDEA 服务启动报:No buffer space available (maximum connections reached): connect的解决方案。

    错误提示:严重: Error starting endpointjava.io.IOException: Unable to establish loopback connectionat sun.n ...

  7. linux新建用户并修改提示符

    1 新建用户 # useradd –d /home/ap/testapp -m testapp 此命令创建了一个用户testapp ,其中-d和-m选项用来为登录名testapp 产生一个主目录/ho ...

  8. ElasticSearch删除索引

    curl -X DELETE http://{ES IP address}:9200/{index_name}

  9. tp 框架目录结构

    ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的.最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布.ThinkPHP从诞生以来一 ...

  10. 03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)

    上一节,我给你讲了要怎么理解平均负载( Load Average),并用三个案例展示了不同场景下平均负载升高的分析方法.这其中,多个进程竞争 CPU 就是一个经常被我们忽视的问题. 我想你一定很好奇, ...