我是靠谱客的博主 贪玩墨镜,最近开发中收集的这篇文章主要介绍spring mvc拦截器 需求:在controller层的方法上,使用自定义注解的方式 不拦截指定请求,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

原来是在controller类上实现此需求
缺点:只能是整个controller类下的方法全部放开拦截,不能放开其中某个方法,颗粒度太高。
现实现在方法上增加注解,更加细颗粒度。

1.首先是自定义的Annocation

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ExcludeInterceptor {

}

2.创建spring mvc 的拦截器

<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.hao.xu.lang.interceptor.InterceptorOne">
            </bean>
        </mvc:interceptor>
</mvc:interceptors>
package com.hao.xu.lang.interceptor;

import com.hao.xu.lang.annotation.ExcludeInterceptor;
import java.util.Objects;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class InterceptorOne implements HandlerInterceptor {
	@Override
	public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {

		//获取到目标方法对象
		HandlerMethod method = (HandlerMethod) o;
		//取到方法上的注解
		ExcludeInterceptor methodAnnotation = method.getMethodAnnotation(ExcludeInterceptor.class);
		if (Objects.isNull(methodAnnotation)) {
			//无此注解的一律拦截
			httpServletResponse.sendRedirect("http://localhost:8080/html/interceptor.html");
			return false;
		}

		System.out.println("Interceptor_preHandle_One");
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

		System.out.println("Interceptor_postHandle_One");
	}

	@Override
	public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

		System.out.println("Interceptor_afterCompletion_One");
	}
}

3.测试controller

@RestController
public class HelloController {

	@RequestMapping(value = "/hi")
	public String hello(HttpSession session) {

		System.out.println("hi");
		return "hi";
	}

	@RequestMapping(value = "/hello")
	@ExcludeInterceptor
	public String hello2(HttpSession session) {

		System.out.println("hello");
		return "hello";
	}

}

4.测试
现在访问 http://localhost:8080/hi.do 被拦截重定向到了error界面
在这里插入图片描述
再访问 http://localhost:8080/hello.do
在这里插入图片描述

最后

以上就是贪玩墨镜为你收集整理的spring mvc拦截器 需求:在controller层的方法上,使用自定义注解的方式 不拦截指定请求的全部内容,希望文章能够帮你解决spring mvc拦截器 需求:在controller层的方法上,使用自定义注解的方式 不拦截指定请求所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部