在java开发中,拦截器使用是很普遍的,最常用的就是登陆拦截了,然后并不是所有的请求我们都需要拦截,比如index页面的请求我们是不拦截的.通常情况下我们有两种方式:先贴出来springboot使用拦截器的case:

1.自定义拦截器,实现HandlerInterceptor ,也可以采用继承的方式(HandlerInterceptorAdapter),内容不重要,看过程

public class LoginHandlerInterceptor implements HandlerInterceptor {

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

HttpSession session = request.getSession();

String username = (String) session.getAttribute("username");

if (StringUtils.isEmpty(username) || !Objects.equals("123456",username)) {

request.setAttribute("msg","没有权限");

request.getRequestDispatcher("/index.html").forward(request,response);

return false;

}else {

return true;

}

}

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {

}

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {

}

}

2.配置我们自定义的拦截器

@Configuration

public class MyConfigurerAdapter extends WebMvcConfigurerAdapter {

@Override

public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("*").excludePathPatterns("/index","/","/user/login");

super.addInterceptors(registry);

}

}

第一种方式就是使用interceptor的excludePatterns来去除我们不要验证的请求

第二种方式是使用注解的方式(虽然这个麻烦一点点,但是使用方便)

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

public @interface UnAuthRequest {

}

然后我们自己的拦截器就需要改一下

public class LoginHandlerInterceptor implements HandlerInterceptor {

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

HttpSession session = request.getSession();

HandlerMethod handlerMethod = (HandlerMethod) handler;

Method method = handlerMethod.getMethod();

UnAuthRequest annotation = method.getAnnotation(UnAuthRequest.class);

if (Objects.nonNull(annotation)) {

return true;

}

String username = (String) session.getAttribute("username");

if (StringUtils.isEmpty(username) || !Objects.equals("123456",username)) {

request.setAttribute("msg","没有权限");

request.getRequestDispatcher("/index.html").forward(request,response);

return false;

}else {

return true;

}

}

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {

}

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {

}

}

这样的话,我们只需要将注解贴在我们不需要拦截的请求上就行了,使用起来很方便.

java拦截器放行_java拦截器放行某些请求相关推荐

  1. java 类加载器 解密_JAVA类加载器总结整理

    一.What(是什么?) 1.概念 Java类加载器是Java运行时环境的一部分,负责动态加载Java类到JVM的内存空间中.每个Java类必须由某个类加载器装入到内存中.每一个类加载器都有一个父类加 ...

  2. java 类加载 双亲委派_Java类加载器和双亲委派机制

    前言 之前详细介绍了Java类的整个加载过程(类加载机制详解).虽然,篇幅较长,但是也不要被内容吓到了,其实每个阶段都可以用一句话来概括. 1)加载:查找并加载类的二进制字节流数据. 2)验证:保证被 ...

  3. java类加载器分类_Java类加载器特点的具体介绍

    Java类加载器一个我们经常使用的优秀语言,但是在我们使用的过程中有不少的问题需要我们解决.下面我们就详细的来看看相关问题的解决方法.想大家有所收获. Java类加载器的特性: 每个ClassLoad ...

  4. java 类加载 双亲委派_java类加载器和双亲委派模型

    一. 类加载器 ClassLoader即常说的类加载器,其功能是用于从Class文件加载所需的类,主要场景用于热部署.代码热替换等场景. 系统提供3种的类加载器:Bootstrap ClassLoad ...

  5. java classloader详解_Java类加载器(ClassLoader)详解

    本文主要讲述Java ClassLoader的工作原理,这为后面将Android App代码热替换或者插件化升级做铺垫 一. 类加载器 ClassLoader即常说的类加载器,其功能是用于从Class ...

  6. java log4j 热部署_JAVA类加载器分析--热部署的缺陷(有代码示例,及分析)

    首先纠正一个误区: 热部署不是我们在Eclipse里面修改了代码不用重启就可以持续调试. 详情可以参考上一篇博文: 热部署和"Hot Code Replace"的区别    htt ...

  7. java类加载器分类_Java 类加载器的种类

    1.定义: 寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件. 2.种类: BootstrapClassLoader:用C++编写的,装载jre中的核心类库: ExtClassLoader ...

  8. java多个构造方法_Java构建器(多个构造器参数)

    今天看netty权威指南,第一次听说构建器,百度了几个博客,但是并没有通俗易懂一点儿的,综合别人的博客,总结如下: 1. 构建器是什么? 当创建对象需要传入多个参数的时候我们通常会根据参数的数量写不同 ...

  9. java防报毒_java接口如何有效防止恶意请求

    解决方法: 1.在redis数据库db0中新建一个名为rd_sms_request_count表,表结构: Ip:客户请求的ip Success_count:成功次数 Failure_count:失败 ...

  10. java 模拟多线程并发_Java中模拟同时并发请求

    有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了. java中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了.但是,这种请求, ...

最新文章

  1. VS2010中整理代码快捷键
  2. 网站建设技术方案_企业网站建设解决方案
  3. 有了这些经典书籍+配套实验环境上线,还有什么借口说学不好编程?
  4. Python——逻辑运算(or,and)
  5. Eclipse Debug不能热部署解决
  6. ES6新特性_Symbol的内置属性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记017
  7. SpringMVC+Spring3+Hibernate4
  8. MyBatis中的@Mapper注解 @Mappe与@MapperScan关系
  9. 火灾检测、人流量统计、安全帽检测,飞桨开源一键运行的产业案例教程
  10. HP DL360 G6 升级BIOS
  11. [转贴]给想立志入行网络或已经初入行的朋友的建议(一)
  12. Date时间里的GMT是什么意思
  13. 为什么技术开发者应该读一读《浪潮之巅》
  14. macbook双系统怎么装mysql_mac装win10双系统的方法_如何安装macos苹果和win10双系统...
  15. elementUI中el-table树形与el-tree树形结构的一键折叠与展开
  16. git 进阶系列教程--tag
  17. windows无法telnet解决办法
  18. 浅析PC机串口通讯流控制
  19. Android RTL 及小语种 适配
  20. 三分钟快速安装 facebookresearch SlowFast

热门文章

  1. pta冒泡排序c语言_PTA 冒泡排序
  2. python简明教程_07
  3. as ssd中文版测试软件,AS SSD Benchmark
  4. HFSS19 官方中文教程系列Workshops L01
  5. 【软件教程】Spring Tool Suite(STS)
  6. 日常Java练习题(每天进步一点点系列)
  7. 2020年互联网大厂中秋礼盒PK!看看你的礼盒怎么样
  8. xshell7,xftp7个人免费版官方下载,无需破解,免激活,下载即可使用
  9. 吴恩达机器学习详细总结(三)
  10. svn删除所有unversioned文件