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; } }
相关推荐
在Spring配置文件中,你需要将拦截器实例注入到Spring MVC的DispatcherServlet中。这通常在配置类中通过@Bean注解完成,如下所示: ```java @Configuration public class WebConfig implements WebMvcConfigurer { ...
- 使用Java配置时,可以通过`@EnableWebMvc` 注解启用Web MVC配置,并在`WebMvcConfigurer` 实现类中重写`addInterceptors()` 方法来注册拦截器。 3. **自定义拦截器**: - 自定义拦截器需要继承`...
1. SpringMVC的配置,包括DispatcherServlet配置、视图解析器设置、拦截器、模型数据绑定等。 2. Hibernate的配置,如数据源设置、SessionFactory的创建、实体类的配置、持久化操作等。 3. SpringMVC中使用Hibernate...
SpringMVC是一个强大的Java web应用程序框架,它由Spring框架扩展而来,主要负责处理HTTP请求和响应,实现模型-视图...在实际开发中,你可以逐步添加更多的功能,如异常处理、视图解析、拦截器等,以满足更复杂的需求。
在本项目中,我们主要探讨的是一个基于SpringMVC、Mybatis、Mysql数据库的完整应用实例,同时涉及到了权限管理和拦截器的实现。这个实例提供了详细的源代码,包括SQL脚本,以及一些实用的工具类,使得开发者可以快速...
拦截器是SpringMVC中的另一个强大特性,它可以增强应用的功能,如权限验证、日志记录、性能统计等。我们在源码中会发现自定义Interceptor的实现,它们通过HandlerInterceptor接口进行预处理和后处理。 国际化(i18n...
3. 创建 SpringMVC 配置文件:这个文件通常命名为 `servlet-context.xml`,定义视图解析器、处理器映射器、拦截器等关键组件。 接下来,我们可以通过编写 Controller 来处理 HTTP 请求。Controller 类通常使用 @...
8. **最佳实践**:笔记可能涵盖了SpringMVC的最佳实践,如使用ModelAndView对象、数据验证、国际化、拦截器等,帮助开发者写出更加高效和健壮的代码。 9. **异常处理**:SpringMVC提供了@ControllerAdvice和@...
每个标签代表一个拦截器,通过指定拦截的URL模式,标签则定义具体的拦截器实例。 2. 配置Java注解:在Java配置类中,使用@EnableWebMvc和@Configuration注解开启Web MVC配置,然后使用@Override注解重写...
2. **SpringMVC拦截器实现**: - SpringMVC的拦截器是通过实现`HandlerInterceptor`接口或者继承`AbstractHandlerInterceptor`类来创建的。主要包含三个方法: - `preHandle(HttpServletRequest request, ...
2. **servlet-context.xml**:这是SpringMVC的配置文件,定义了视图解析器、拦截器、模型-视图映射等核心组件。例如,你可以在这里配置ViewResolver来指定视图如何被渲染,或者配置HandlerMapping来定义请求URL与...
拦截器(Interceptor)是SpringMVC中一种强大的工具,可以拦截请求并在进入控制器之前或之后执行自定义逻辑,如登录检查、权限验证、日志记录等。在示例中,你可以查看如何定义和配置自定义拦截器,并了解它们在处理...
总结来说,"基于springMVC的session拦截器.rar"是一个展示如何在Spring MVC中使用拦截器来管理用户Session的实例。通过拦截器,开发者能够实现诸如用户认证、权限控制等高级功能,提高Web应用的安全性和用户体验。...
学习 Spring MVC,还需要理解注解的使用,如 @RequestParam、@PathVariable、@ModelAttribute 等,以及 Spring 提供的其他高级特性,如拦截器(Interceptor)、异常处理器(Exception Handler)和国际化...
7. **拦截器(Interceptor)**:自定义拦截器可实现预处理和后处理功能,如日志记录、权限验证等。 8. **Spring配置文件**:通常在`src/main/resources`下有`applicationContext.xml`或`spring-servlet.xml`,配置...
在本实例中,你将学习如何使用Spring MVC实现一系列核心功能,如路径映射、视图解析、拦截器以及异常处理。 1. **路径映射**: 在Spring MVC中,控制器类的方法通常与URL路径关联,这个过程称为路径映射。通过`@...
1. **配置 SpringMVC**:在 `web.xml` 中配置 DispatcherServlet,同时定义 Spring 的上下文配置文件,如 `servlet-context.xml`,在这里配置 MVC 的相关组件,如视图解析器、拦截器等。 2. **配置 Hibernate**:在...
6. **拦截器**:自定义拦截器可以实现通用的功能,如权限控制、日志记录等,这些拦截器可以在请求处理前后执行。 这个"Spring+SpringMVC极度精简版本实例"可能包含了一个基本的 Web 应用设置,包括了 ...
**Spring MVC 入门实例详解** Spring MVC 是一个基于 Java 的模型-视图-控制器(MVC)架构,是 ...随着对 Spring MVC 的深入学习,你将掌握更多高级特性,如拦截器、AOP、数据绑定、国际化等,实现更复杂的业务逻辑。
这个Demo提供了一个基础的SSM拦截器应用实例,对于初学者来说,这是一个很好的学习资源,可以了解SSM框架下拦截器的使用、登录验证的实现以及Maven项目的构建流程。同时,它也展示了如何结合SQL文件创建数据库表和...