`
luozhonghua2014
  • 浏览: 62617 次
文章分类
社区版块
存档分类
最新评论

自定义 spring mvc 拦截器(近期项目需求实现)

 
阅读更多

需求背景:特定文件夹下任何文件不经过登录,全部拦截强制跳转登录,并客户端禁止下载服务器定制文件夹文件

经过1天多时间的各种尝试,自定义式的强大拦截器实现了,废话不说了,直接贴代码啦。


demo:

1> 根目录下 index.html 内容:

<a href="html/index.html">index</a><br/>
<a href="html/login3.html">login3.html---</a><br/>
<a href="html/xxx.xx">xxx.xx---</a><br/>

<a href="html/1.jpg">1.jpg---</a><br/>

<a href="html/1.src">1.src---</a><br/>

<a href="html/1.zip">1.zip---</a><br/>

。。。。。任何写啦

2> dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!--
使Spring支持自动检测组件,如注解的Controller
-->
<context:component-scan base-package="com.yjde.web.controller" /><!--





<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/html/" p:suffix=".html" />

--><!--<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
-->

<mvc:interceptors>
<mvc:interceptor>
<!--设置拦截的路径:具体路径的拦截-->
<!--<mvc:mapping path="/*.*" />
<mvc:mapping path="/login1.do" />
<mvc:mapping path="/login2.do" />-->

<mvc:mapping path="/*.*" />

<bean class="com.yjde.web.interceptor.TimeInterceptor">
<!--openingTime 属性指定上班时间-->
<property name="openingTime">
<value>12</value>
</property>
<!--closingTime属性指定下班时间-->
<property name="closingTime">
<value>14</value>
</property>
<!--outsideOfficeHoursPage属性指定提示页面的URL-->
<property name="outsideOfficeHoursPage">
<value>http://localhost:8080/SpringMVCInterceptor/login/login.html
</value>
</property>
</bean>
</mvc:interceptor>
</mvc:interceptors><!--


<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename="message" />


--></beans>


3>web.xml

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">



<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>


<servlet>

<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc/*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/html/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>


<!--处理从页面传递中文到后台而出现的中文乱码问题-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

4> java 源码:

package com.yjde.web.interceptor;


import java.util.Calendar;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;


public class TimeInterceptor extends HandlerInterceptorAdapter {
// 继承HandlerInterceptorAdapter类


private int openingTime; // openingTime 属性指定上班时间
private int closingTime; // closingTime属性指定下班时间
private String outsideOfficeHoursPage;// outsideOfficeHoursPage属性指定错误提示页面的URL


// 重写 preHandle()方法,在业务处理器处理请求之前对该请求进行拦截处理
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
Calendar cal = Calendar.getInstance();

System.out.println(">>"+request.getRequestURL());
System.out.println(request.getRequestURI());

int hour = cal.get(Calendar.HOUR_OF_DAY); // 获取当前时间
if (openingTime <= hour && hour < closingTime) { // 判断当前是否处于工作时间段内
return true;
} else {
response.sendRedirect(outsideOfficeHoursPage); // 返回提示页面
return false;
}
}


public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object o, ModelAndView mav)
throws Exception {
System.out.println("postHandle");
}


public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object o, Exception excptn)
throws Exception {
System.out.println("afterCompletion");
}


public int getOpeningTime() {
return openingTime;
}


public void setOpeningTime(int openingTime) {
this.openingTime = openingTime;
}


public int getClosingTime() {
return closingTime;
}


public void setClosingTime(int closingTime) {
this.closingTime = closingTime;
}


public String getOutsideOfficeHoursPage() {
return outsideOfficeHoursPage;
}


public void setOutsideOfficeHoursPage(String outsideOfficeHoursPage) {
this.outsideOfficeHoursPage = outsideOfficeHoursPage;
}


}
// 可以看出,上面的代码重载了preHandle()方法,该方法在业务处理器处理请求之前被调用。在该方法中,首先获得当前的时间,判断其是否在
// openingTime和closingTime之间,如果在,返回true,这样才会调用业务控制器去处理该请求;否则直接转向一个静态页面,返回
// false,这样该请求就不会被处理。


5>java源码:


package com.yjde.web.controller;


import java.io.PrintWriter;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;


@Controller
public class LoginController {


@RequestMapping(value="/{username}", method = RequestMethod.GET)
public String html(@PathVariable("username") String username,HttpServletRequest request) {
System.out.println("拦截成功:"+username);
return username;
}

}



分享到:
评论

相关推荐

    Spring MVC--13.自定义拦截器

    Spring MVC--自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器

    spring mvc拦截器过滤json中的null值

    完成拦截器实现后,我们需要在Spring MVC配置中注册它。在`WebMvcConfigurer`的实现类中添加以下代码: ```java @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Override ...

    Spring MVC 拦截器

    在Spring MVC中,拦截器接口由`HandlerInterceptor`定义,而`HandlerInterceptorAdapter`类则提供了一个适配器模式的默认实现,简化了拦截器的开发过程。`HandlerInterceptor`接口包含以下三个核心方法: 1. **`...

    Spring MVC 拦截器入门例子

    Spring MVC 拦截器是基于Java的Web开发框架Spring MVC中的一个重要组件,它允许开发者在请求被控制器处理之前或之后执行自定义逻辑。拦截器主要用于实现通用功能,如权限验证、日志记录、性能监控等,从而提高代码的...

    spring MVC(新增拦截器demo)

    通过学习这个“spring MVC(新增拦截器demo)”项目,你不仅能够理解Spring MVC拦截器的基本使用,还能掌握如何将拦截器应用于实际的需求场景。拦截器的灵活运用可以大大提高代码的复用性和维护性,使得Spring MVC应用...

    spring mvc 中 实现自定义注解 拦截需要的方法

    网上很多人想使用注解拦截spring mvc action中的一个方法,实现方法很多,一般是通过在拦截器中分析url路径来实现, 使用自定义注解的方式来标注要拦截的 action 中的某个方法, 没有很好的解决方法, 如果通过借助spring...

    spring mvc 拦截器获取请求数据信息.rar

    为了在项目中使用这个拦截器,你需要将其配置到Spring MVC的DispatcherServlet配置中,通常在`web.xml`或Spring的配置文件中。添加`&lt;mvc:interceptors&gt;`元素,并在其中定义你的拦截器bean。 最后,需要注意的是,...

    详解Spring MVC拦截器实现session控制

    在本篇文章中,我们详细探讨了如何通过Spring MVC拦截器实现session的控制,特别是在处理用户登录状态和防止重复登录的场景。 首先,session监听是实现session控制的一种常见方法,通过实现特定的监听器接口,可以...

    spring+spring mvc+mybatis框架整合实现超市货物管理系统

    同时,还需要配置Spring MVC的`servlet-context.xml`,定义DispatcherServlet的拦截器、视图解析器等。对于MyBatis,我们需要创建`mybatis-config.xml`配置文件,配置数据源、事务管理器以及映射文件的位置。 ...

    Spring MVC 教程快速入门 深入分析

    九、Spring MVC中的拦截器:拦截器是Spring MVC提供的一个可插入的组件,可以用来实现请求预处理和后处理。拦截器可以在请求到达控制器之前进行拦截,并对请求或响应进行一些预处理工作。 十、Spring MVC如何使用...

    java之spring mvc之拦截器.docx

    3. **登录拦截器实现** 一个常见的应用是实现登录拦截器,确保只有已登录的用户才能访问特定的资源。如`LoginInterceptor`类所示,它继承自`HandlerInterceptorAdapter`,并在`preHandle`方法中检查用户的登录状态...

    spring mvc xml配置拦截器

    下面将详细介绍创建和配置Spring MVC拦截器的步骤。 1. **创建自定义拦截器** 首先,我们需要创建一个实现`HandlerInterceptor`接口的类。这个接口包含三个方法: - `preHandle(HttpServletRequest request, ...

    Spring mvc拦截器实现原理解析

    Spring MVC拦截器实现原理解析 Spring MVC拦截器是Spring MVC框架中的一种机制,可以对处理器进行预处理和后处理。它类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些...

    Spring+Spring mvc+Hibernate+Bootstrap、企业级员工信息管理系统

    后台通过自定义注解结合一个访问拦截器实现整个系统的权限控制 04. 系统前台采用全采用的Html+jQuery开发 05. 系统前台与后台的交互全部使用 Ajax 异步请求 06. 自定义 SecureValid 注解实现权限的控制 07. ...

    Mastering Spring MVC 4(2015.09)源码

    拦截器(Interceptor)是Spring MVC中的一种机制,可以在请求处理前、后执行自定义逻辑。通过实现HandlerInterceptor接口或使用@Interceptor注解,开发者可以添加全局的行为,如日志记录、权限检查等。 此外,...

    spring-boot 自定义xml配置web请求拦截器

    标题中的"spring-boot 自定义xml配置web请求拦截器"指的是在Spring Boot项目中,通过XML配置方式实现对Web请求的拦截处理。这涉及到Spring Boot的Web层架构、AOP(面向切面编程)以及自定义拦截器的概念。Spring ...

    spring boot 登录拦截器

    Spring Boot结合了Spring MVC框架,提供了方便的方式来实现这样的拦截器。本篇文章将深入探讨如何使用Spring Boot、JPA连接数据库以及设置登录拦截器来拦截指定路径。 首先,我们需要理解Spring Boot中的JPA(Java ...

    struts2整合spring实现拦截器

    在本文中,我们将深入探讨如何实现Struts2与Spring的集成,以及利用拦截器来增强应用的功能。 首先,Struts2 是一个基于MVC设计模式的开源Web框架,它提供了强大的控制器层,使得开发者可以更方便地处理HTTP请求和...

Global site tag (gtag.js) - Google Analytics