`
eric_hwp
  • 浏览: 125284 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SpringMVC拦截器实例之自定义注解

 
阅读更多
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;

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

import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class OAuth2Interceptor implements HandlerInterceptor {

	/**
	 * 在DispatcherServlet完全处理完请求后被调用
	 * 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()
	 */
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
		System.out.println("**执行顺序: 3、afterCompletion**");

	}

	/**
	 * 在业务处理器处理请求执行完成后,生成视图之前执行的动作
	 */
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView modelAndView) throws Exception {
		System.out.println("**执行顺序: 2、postHandle**");

	}

	/**
	 * 在业务处理器处理请求之前被调用 如果返回false 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
	 * 如果返回true 执行下一个拦截器,直到所有的拦截器都执行完毕 再执行被拦截的Controller 然后进入拦截器链,
	 * 从最后一个拦截器往回执行所有的postHandle() 接着再从最后一个拦截器往回执行所有的afterCompletion()
	 */
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		System.out.println("**执行顺序: 1、preHandle**");
		String url = request.getRequestURL().toString();

		HttpSession session = request.getSession();
		// 先判断是否有注解

		HandlerMethod handlerMethod = (HandlerMethod) handler;
		Method method = handlerMethod.getMethod();
		OAuthRequired annotation = method.getAnnotation(OAuthRequired.class);
		if (annotation != null) {
			System.out.println("OAuthRequired:你的访问需要获取登录信息!");
			Object objUid = session.getAttribute("UserId");
			if (objUid == null) {
				String resultUrl = request.getRequestURL().toString();
				String param=request.getQueryString();
				if(param!=null){
					resultUrl+= "?" + param;
				}
				System.out.println("resultUrl="+resultUrl);
				try {
					resultUrl = java.net.URLEncoder.encode(resultUrl, "utf-8");
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				//请求的路径
		        String contextPath=request.getContextPath();
				response.sendRedirect(contextPath + "/oauth2.do?resultUrl=" + resultUrl);
				return false;
			}

		}
		return true;
	}

}

 

分享到:
评论

相关推荐

    SpringMvc自定义拦截器(注解)代码实例

    在Spring配置文件中,你需要将拦截器实例注入到Spring MVC的DispatcherServlet中。这通常在配置类中通过@Bean注解完成,如下所示: ```java @Configuration public class WebConfig implements WebMvcConfigurer { ...

    SpringMVC拦截器例子详解

    - 使用Java配置时,可以通过`@EnableWebMvc` 注解启用Web MVC配置,并在`WebMvcConfigurer` 实现类中重写`addInterceptors()` 方法来注册拦截器。 3. **自定义拦截器**: - 自定义拦截器需要继承`...

    SpringMVC+hibernate实例

    1. SpringMVC的配置,包括DispatcherServlet配置、视图解析器设置、拦截器、模型数据绑定等。 2. Hibernate的配置,如数据源设置、SessionFactory的创建、实体类的配置、持久化操作等。 3. SpringMVC中使用Hibernate...

    SpringMVC简单注解实例

    SpringMVC是一个强大的Java web应用程序框架,它由Spring框架扩展而来,主要负责处理HTTP请求和响应,实现模型-视图...在实际开发中,你可以逐步添加更多的功能,如异常处理、视图解析、拦截器等,以满足更复杂的需求。

    SpringMVC+Mybatis+Mysql+权限+拦截器的整合实例 源码程序

    在本项目中,我们主要探讨的是一个基于SpringMVC、Mybatis、Mysql数据库的完整应用实例,同时涉及到了权限管理和拦截器的实现。这个实例提供了详细的源代码,包括SQL脚本,以及一些实用的工具类,使得开发者可以快速...

    SpringMVC demo 完整源码实例下载.zip

    拦截器是SpringMVC中的另一个强大特性,它可以增强应用的功能,如权限验证、日志记录、性能统计等。我们在源码中会发现自定义Interceptor的实现,它们通过HandlerInterceptor接口进行预处理和后处理。 国际化(i18n...

    SpringMVC 实例

    3. 创建 SpringMVC 配置文件:这个文件通常命名为 `servlet-context.xml`,定义视图解析器、处理器映射器、拦截器等关键组件。 接下来,我们可以通过编写 Controller 来处理 HTTP 请求。Controller 类通常使用 @...

    springMVC笔记以及实例

    8. **最佳实践**:笔记可能涵盖了SpringMVC的最佳实践,如使用ModelAndView对象、数据验证、国际化、拦截器等,帮助开发者写出更加高效和健壮的代码。 9. **异常处理**:SpringMVC提供了@ControllerAdvice和@...

    SpringMVC(十)拦截器

    每个标签代表一个拦截器,通过指定拦截的URL模式,标签则定义具体的拦截器实例。 2. 配置Java注解:在Java配置类中,使用@EnableWebMvc和@Configuration注解开启Web MVC配置,然后使用@Override注解重写...

    SpringMVC四种映射方式实例代码

    2. **SpringMVC拦截器实现**: - SpringMVC的拦截器是通过实现`HandlerInterceptor`接口或者继承`AbstractHandlerInterceptor`类来创建的。主要包含三个方法: - `preHandle(HttpServletRequest request, ...

    SpringMVC框架搭建实例

    2. **servlet-context.xml**:这是SpringMVC的配置文件,定义了视图解析器、拦截器、模型-视图映射等核心组件。例如,你可以在这里配置ViewResolver来指定视图如何被渲染,或者配置HandlerMapping来定义请求URL与...

    SpringMVC demo 完整源码实例下载

    拦截器(Interceptor)是SpringMVC中一种强大的工具,可以拦截请求并在进入控制器之前或之后执行自定义逻辑,如登录检查、权限验证、日志记录等。在示例中,你可以查看如何定义和配置自定义拦截器,并了解它们在处理...

    基于springMVC的session拦截器.rar

    总结来说,"基于springMVC的session拦截器.rar"是一个展示如何在Spring MVC中使用拦截器来管理用户Session的实例。通过拦截器,开发者能够实现诸如用户认证、权限控制等高级功能,提高Web应用的安全性和用户体验。...

    最简单springMVC实例

    学习 Spring MVC,还需要理解注解的使用,如 @RequestParam、@PathVariable、@ModelAttribute 等,以及 Spring 提供的其他高级特性,如拦截器(Interceptor)、异常处理器(Exception Handler)和国际化...

    maven springmvc 项目实例

    7. **拦截器(Interceptor)**:自定义拦截器可实现预处理和后处理功能,如日志记录、权限验证等。 8. **Spring配置文件**:通常在`src/main/resources`下有`applicationContext.xml`或`spring-servlet.xml`,配置...

    springmvc框架实例

    在本实例中,你将学习如何使用Spring MVC实现一系列核心功能,如路径映射、视图解析、拦截器以及异常处理。 1. **路径映射**: 在Spring MVC中,控制器类的方法通常与URL路径关联,这个过程称为路径映射。通过`@...

    springmvc与hibernate结合实例

    1. **配置 SpringMVC**:在 `web.xml` 中配置 DispatcherServlet,同时定义 Spring 的上下文配置文件,如 `servlet-context.xml`,在这里配置 MVC 的相关组件,如视图解析器、拦截器等。 2. **配置 Hibernate**:在...

    spring+springMVC极度精简版本实例

    6. **拦截器**:自定义拦截器可以实现通用的功能,如权限控制、日志记录等,这些拦截器可以在请求处理前后执行。 这个"Spring+SpringMVC极度精简版本实例"可能包含了一个基本的 Web 应用设置,包括了 ...

    Springmvc入门实例

    **Spring MVC 入门实例详解** Spring MVC 是一个基于 Java 的模型-视图-控制器(MVC)架构,是 ...随着对 Spring MVC 的深入学习,你将掌握更多高级特性,如拦截器、AOP、数据绑定、国际化等,实现更复杂的业务逻辑。

    ssm+maven用拦截器实现登录小Demo

    这个Demo提供了一个基础的SSM拦截器应用实例,对于初学者来说,这是一个很好的学习资源,可以了解SSM框架下拦截器的使用、登录验证的实现以及Maven项目的构建流程。同时,它也展示了如何结合SQL文件创建数据库表和...

Global site tag (gtag.js) - Google Analytics