一、创建interceptor包,在interceptor中创建一个拦截器并实现HandlerInterceptor

代码:

@Component
public class LoginHandlerInterceptor implements HandlerInterceptor { @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //拦截逻辑
Object user = request.getSession().getAttribute("loginUser");
if (user == null) {
System.out.println("没有权限请先登陆");
//未登陆,返回登陆界面
request.setAttribute("msg","没有权限请先登陆");
request.getRequestDispatcher("/login").forward(request,response);
return false;
} else {
//已登陆,放行请求
return true;
}
}
}

注意一下:在低版本的SpringBoot中需要实现postHandle方法和afterCompletion方法,高版本的SpringBoot需要用到这两个方法直接重写就行了,在这就不做过多的介绍了。

二、创建一个SpringMvc配置类并实现WebMvcConfigurer类

代码:

@Configuration
public class MyWebMvcConfiguration implements WebMvcConfigurer { @Autowired
LoginHandlerInterceptor loginHandlerInterceptor; @Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("forward:/login");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
} //注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//拦截所有的请求
registry.addInterceptor(loginHandlerInterceptor).addPathPatterns("/**").excludePathPatterns("/login", "/register").excludePathPatterns("/static/**");
} }

注意:在SpringBoot中,只能通过创建SpringMVC配置文件来注册拦截器,

.addPathPatterns("/**")表示拦截所有的请求,
excludePathPatterns表示路径不需要拦截哪些路径
一定要在这里排除拦截static路径下的静态文件,或者在SpringBoot配置文件上配置,否则页面加载不到样式

最新文章

  1. Linux 内核数据结构:双向链表
  2. android之自定义广播
  3. UVALive 4682 XOR Sum (trie)
  4. wpf 在引用外部的资源字典
  5. QinQ封装及终结详解
  6. spring applicationContext.xml 文件
  7. java 内存泄露 学习
  8. Solr4.8.0源码分析(26)之Recovery失败造成的宕机原因分析
  9. iOS 删除相册中照片--来自简书
  10. hdu 2896 病毒侵袭 AC自动机 基础题
  11. WebBrowser编程简述
  12. Sonya and Problem Wihtout a Legend
  13. 使用ANY和ALL条件
  14. qt之窗口换肤
  15. dede 5.7 任意用户重置密码前台
  16. [React] react.js的一些库和用法
  17. 使用cmd导入导出oracle数据库dmp文件
  18. js 模拟css3 动画
  19. Appium+Python 自动化-appium常用元素定位方法
  20. js小知识

热门文章

  1. [SHOI 2007] 善意的投票
  2. 动态规划专题 01背包问题详解 HDU 2546 饭卡
  3. android项目源码
  4. PostgreSQL 务实应用(三/5)分表复制
  5. 换装demo时美术遇到的问题详解
  6. C++函数返回值与引用
  7. pytest入门学习(1)
  8. 使用命令动态更新JAR包中的文件
  9. C 语言实例 - 计算 int, float, double 和 char 字节大小
  10. [題解]luogu_P2055假期的宿舍(二分圖最大匹配)