第一道防线__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。
还有,很多哥们儿会忽略的一点就是没有配置不需要拦截的请求,当然我们网站的注册和登录请求时不能被拦截的,所以记得在配置的时候顺带配置一下不需要拦截的请求。
分类:
Java框架
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?