`

springboot中使用springmvc的拦截器-HandlerInterceptorAdapter

    博客分类:
  • java
阅读更多
springboot中使用springmvc的拦截器-HandlerInterceptorAdapter

拦截器配合注解使用: 权限判断

(1)controller层:
@AuthorityValid(validate=true)
@RequestMapping("/")
public String list(Model model) {
System.out.println(" *** controller *** "+this);
return "index";
}

(2)自定义注解@AuthorityValid
@Documented
@Inherited
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthorityValid {
    boolean validate() default true;
}

(3)拦截器:会拦截带@AuthorityValid注解的方法
public class AuthorityInterceptorAdapter extends HandlerInterceptorAdapter {
    private static final Logger logger = LoggerFactory.getLogger(AuthorityInterceptorAdapter.class);

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        //处理Permission Annotation,实现方法级权限控制
        if (handler.getClass().isAssignableFrom(HandlerMethod.class)) {
            HandlerMethod handlerMethod = (HandlerMethod) handler;
             /*
             * 1、确认当前的controller是否需要进行权限判定,如果需要则进行验证。
             * 2、当controller不需要验证,则验证当前的方法是否需要权限验证,需要则进行验证,不需要则跳出
             * */
            //获取controller注解, controller检查是否需要验证权限控制
            AuthorityValid permission = handlerMethod.getMethod().getDeclaringClass().getAnnotation(AuthorityValid.class);
            if (permission != null && !permission.validate()) { //不需要验证权限
                return super.preHandle(request, response, handler);
            }
             //获取方法注解,方法检查是否需要验证权限控制
            permission = handlerMethod.getMethod().getAnnotation(AuthorityValid.class);
            if (permission != null && !permission.validate()) { //不需要验证权限
            Parameter[] args = handlerMethod.getMethod().getParameters();
            logger.info("参数:{}", args[0]);
            return super.preHandle(request, response, handler);
            }
             // 权限判断,没有权限则跳转至无权限页面,有权限则走正常流程
            logger.info("权限判断...");
        }
        return super.preHandle(request, response, handler);
    }
}

(4)自动配置
@Configuration
public class InterceptorConfig extends WebMvcConfigurerAdapter {
    @Bean
    public AuthorityInterceptorAdapter getValidInterceptor() {
        return new AuthorityInterceptorAdapter();
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration addInterceptor = registry.addInterceptor(getValidInterceptor());
        // 排除配置
        addInterceptor.excludePathPatterns("/error");
        addInterceptor.excludePathPatterns("/login**");
        // 拦截配置
        addInterceptor.addPathPatterns("/**");
    }
}

分享到:
评论

相关推荐

    企业级开发-SpringMVC使用拦截器实现用户登录权限验证实验报告.docx

    配置 SpringMVC 拦截器,我们需要在 `springmvc-config.xml` 文件中添加以下内容: ```xml ... ... ``` 此外,还需要在 `web.xml` 文件中配置 SpringMVC 的前端控制器 DispatcherServlet: ```xml ...

    springmvc-login-interceptor

    3. 注册拦截器:将自定义的拦截器类添加到Spring容器,可以通过`@Component`注解实现,然后使用`@Autowired`和`@Order`注解注入到`HandlerMapping`的bean中,`@Order`用于设置拦截器的执行顺序。 4. 实现业务逻辑:...

    SpringMVC拦截器例子详解

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

    springMVC拦截器

    SpringMVC 拦截器是 Spring MVC 框架中的一个重要组成部分,它允许开发者在控制器处理请求之前或之后执行自定义逻辑。拦截器可以用于实现登录检查、权限验证、日志记录、性能监控等多种功能。本文将详细介绍 ...

    springmvc拦截器实现登录验证

    这通常在Spring配置类中完成,使用`@Configuration`和`@EnableWebMvc`注解,并且通过`addInterceptors()`方法将拦截器添加到`InterceptorRegistry`。 4. **配置拦截路径**:在注册拦截器时,需要指定拦截哪些URL。...

    SpringMVC拦截器的使用

    在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,用于在请求被控制器处理之前或之后执行特定的逻辑。它可以用来实现诸如权限验证、日志记录、性能统计、缓存控制等多种功能。在这个主题中,我们将深入...

    SpringMVC中使用Interceptor拦截器

    本篇文章将深入探讨如何在Spring MVC中使用Interceptor拦截器。 首先,Interceptor的实现需要继承自`HandlerInterceptor`接口或者实现`HandlerInterceptorAdapter`适配器类,这两个类都包含三个核心方法: 1. `...

    springmvc-spring-mybatis所需jar包

    接着,在Spring MVC的配置文件(如:servlet-context.xml)中配置DispatcherServlet、视图解析器(如:InternalResourceViewResolver)以及Spring MVC的拦截器(如:HandlerInterceptorAdapter)。 MyBatis的配置...

    Spring拦截器,高级参数绑定

    首先,我们创建一个Spring拦截器需要实现HandlerInterceptor接口或继承HandlerInterceptorAdapter抽象类。以下是一个简单的拦截器示例: ```java import org.springframework.web.servlet.HandlerInterceptor; ...

    SpringMVC 中的拦截器与异常处理

    1. 拦截器的注册:拦截器需要在SpringMVC配置中进行注册,通过`<mvc:interceptors>`标签或者在Java配置中使用`addInterceptors()`方法添加到拦截器链中。每个拦截器都有`preHandle()`, `postHandle()` 和 `...

    SpringMVC拦截器

    在这个"SpringMVC拦截器"的实践中,我们将探讨如何实现一个用于登录验证的拦截器。 首先,我们需要创建一个自定义的拦截器类,该类需要继承自Spring MVC的`HandlerInterceptor`接口或实现`...

    springmvc(自定义拦截器的使用)

    在Spring MVC的配置文件中,你需要使用`<mvc:interceptors>`标签来定义拦截器集合。每个拦截器可以由`<mvc:interceptor>`标签定义,并通过`<mvc:mapping>`指定其匹配的URL路径。 ```xml <!-- 配置自定义拦截器 --...

    springmvc拦截器

    可以通过在控制器方法上使用`@RequestMapping`的`excludePatterns`属性来排除特定路径,或者在拦截器的`preHandle`方法中判断并决定是否继续执行。 总之,Spring MVC拦截器是构建Web应用时不可或缺的一个工具,它极...

    springMVC3学习(七)--Interceptor拦截器(源码)

    在Spring MVC中,Interceptor(拦截器)是一种强大的机制,它允许开发者在请求处理前后执行自定义逻辑,而不必侵入到Controller代码中。本篇文章主要探讨了Interceptor的使用及其源码解析,帮助深入理解其工作原理。...

    SpringMVC-拦截除登陆外的其他请求

    "SpringMVC-拦截除登陆外的其他请求"这一主题旨在教你如何配置Spring MVC拦截器,以便在用户未登录时阻止他们访问特定的URL,而允许已登录用户正常操作。下面我们将深入探讨这一主题。 1. **Spring MVC 拦截器基础*...

    Spring MVC 拦截器

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

    详解SpringMVC拦截器(资源和权限管理)

    SpringMVC拦截器是Spring MVC框架中用于处理请求和响应之间的一种机制,它允许开发者在请求到达控制器之前或之后执行一些额外的操作。拦截器对于资源和权限管理至关重要,因为它们可以实现诸如登录检查、访问控制、...

    springmvc传值对象及拦截器

    Spring MVC的拦截器基于AOP(面向切面编程)原理,它们通过实现`HandlerInterceptor`接口或继承`HandlerInterceptorAdapter`抽象类来定义。拦截器链的概念使得多个拦截器可以按照特定顺序执行,每个拦截器都可以决定...

    Java实训教程 Java软件开发实战 Java开发框架介绍 SpringMVC_10_拦截器 共7页.pptx

    ### Java实训教程知识点详解——SpringMVC拦截器 #### 一、SpringMVC概述与应用场景 SpringMVC作为Spring框架中的一个模块,主要用于构建Web应用。它是一个基于MVC(Model-View-Controller)设计模式的轻量级框架...

    SpringMVC学习(十二)——SpringMVC中的拦截器

    2. 使用Java配置:在`WebMvcConfigurer`接口的实现类中,使用`addInterceptors()`方法添加拦截器。 实际应用场景包括但不限于: 1. 权限验证:在请求处理前检查用户登录状态,未登录时重定向到登录页面。 2. 访问...

Global site tag (gtag.js) - Google Analytics