第一道防线__SpringMVC配置拦截器
时间:2022-04-24
本文章向大家介绍第一道防线__SpringMVC配置拦截器,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这几天在公司自己开发一个小系统,但是系统的安全性也得考虑,起初没注意,赶急就光关心业务逻辑和实现效果。最后老大一出手,就把最严重的问题指出来了,他说你这根本没安全性可言,于是我试着将公司使用的spring security框架拿过来,但是在这之前我又尝试配置一下springmvc的拦截器,也可以说是网站的第一道防线。
这里我就拿用户登录问题来说吧。
1、首先自己手动编写一个拦截器类(自定义拦截器类),伪代码如下:
1 public class LoginInterceptor implements HandlerInterceptor {
3 @Override
4 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
5 throws Exception {
6 LoginInfo user = (LoginInfo)request.getSession().getAttribute("info");
7 if (user == null) {
8 System.out.println("尚未登录,调到登录页面");
9 response.sendRedirect("/");
10 return false;
11 }
13 return true;
14 }
16 @Override
17 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
18 ModelAndView modelAndView) throws Exception {
19 System.out.println("postHandle");
20
21 }
23 @Override
24 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
25 throws Exception {
26 System.out.println("afterCompletion");
28 }
30 }
说一下这个自定义拦截器类吧,首先他要想成为一个拦截器,就必须得先继承HandlerInterceptor接口,继承该接口后必须实现3个方法。
方法preHandel主要是请求处理之前调用,也就是将你需要把什么样的请求拦截,什么样的请求不拦截做出逻辑处理。其他俩个方法你可以不做任何处理。
2、在springmvc核心配置文件中配置:
1 <mvc:interceptors>
2 <mvc:interceptor>
3 <!-- 拦截所有URL中包含/customer/的请求 -->
4 <mvc:mapping path="/customer/*"/>
5 <mvc:mapping path="/task/*"/>
6 <mvc:mapping path="/app/*"/>
7 <mvc:mapping path="/user/*"/>
8 <mvc:mapping path="/transfer/*"/>
9 <mvc:mapping path="/cgs/*"/>
10 <mvc:mapping path="/owner/*"/>
11 <mvc:mapping path="/mortgager/*"/>
12 <!-- 不需要拦截的请求 -->
13 <mvc:exclude-mapping path="/cgs/login"/>
14 <bean id="loginInterceptor" class="com.tgsit.cgs.interceptor.LoginInterceptor"/>
15 </mvc:interceptor>
16 </mvc:interceptors>
这里需要说明一点:配置需要拦截的请求时,如果后面没有/**,则它会拦截所有的controller。
还有,很多哥们儿会忽略的一点就是没有配置不需要拦截的请求,当然我们网站的注册和登录请求时不能被拦截的,所以记得在配置的时候顺带配置一下不需要拦截的请求。
- POJ 2484 A Funny Game(智商博弈)
- php pathinfo()的用法
- BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)
- 微信公众平台开发
- BZOJ 1115: [POI2009]石子游戏Kam (阶梯nim)
- php性能监测模块XHProf
- BZOJ 1022: [SHOI2008]小约翰的游戏John (Anti-nim)
- 洛谷P2252 取石子游戏(威佐夫博弈)
- HDU 3032 Nim or not Nim?(Multi-Nim)
- POJ 2311 Cutting Game(二维SG+Multi-Nim)
- js去掉html标签和去掉字符串文本的所有的空格
- php操作memcache的使用测试总结
- linux awk命令详解
- php str_split 解决中文
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- AkShare-重要机构-伦敦金属交易所
- 为什么不推荐使用BeanUtils属性转换工具
- 从源码打造云原生时代的「Linux」——Kubernetes
- Django-models & QuerySet API
- [奇淫巧技]GitHub个人页的新玩法
- 一致性哈希的分析与实现
- 关系型数据库查询语言 SQL 和图数据库查询语言 nGQL 对比
- 目标检测之评价指标 - mAP
- sass的基础用法
- Golang Gin 实战(十四)| 文件托管、反向代理百度网站、自实现API网关
- ceph修复pg inconsistent
- 基于kubernetes的kong网关实战
- 移动端适配必须掌握的基本概念和适配方案
- [OHIF-Viewers]医疗数字阅片-医学影像-Redux中的reducer到底是什么,以及它为什么叫reducer?
- 【从零开始用Swift开发一个iOS应用(仿微博)】开篇-1. demo上手体验