第一道防线__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。

  还有,很多哥们儿会忽略的一点就是没有配置不需要拦截的请求,当然我们网站的注册和登录请求时不能被拦截的,所以记得在配置的时候顺带配置一下不需要拦截的请求。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木宛城主

Unity应用架构设计(12)——AOP思想的实践

想象一下,当程序所有的业务逻辑都完成的时候,你可能还来不及喘口气,紧张的测试即将来临。你的Boss告诉你,虽然程序没问题,但某些方法为什么执行这么慢,性能堪忧...

37870
来自专栏编程

Java面试中问及Hibernate与MyBatis的对比,在这里做一下总结

我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和myb...

310100
来自专栏技术小讲堂

Singal Page App:使用Knockout和RequireJS创建高度模块化的单页应用引擎背景知识文档结构服务端API准备Require配置与系统配置模块中的工作模块间的工作烂图赏鉴代码送上

开篇扯淡 距离上一篇文章已经有好几个月,也不是没有时间记录点东西,主要是换了新的工作,在一家外资工作,目前的工作内容大多都是前端开发,新接触的东西因为时间原因,...

32560
来自专栏安富莱嵌入式技术分享

【二代示波器教程】第13章 RTX操作系统版本二代示波器实现

本章教程为大家讲解RTX操作系统版本的二代示波器实现。主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任务栈,系统栈以及全局变量共享问题。...

19520
来自专栏互联网杂技

内存卡存储原理,你知道吗?

1、 简介: SD卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器...

54360
来自专栏杨建荣的学习笔记

使用awr来分析sesson leak问题(r3笔记第78天)

awr是生产环境中排查问题的利器,但是有一些问题是awr定位不了的。不如session leak的问题,因为v$session中的数据是实时改变的,一来awr...

364120
来自专栏自动化测试实战

接口测试基础——第6篇unittest模块(一)

37060
来自专栏進无尽的文章

编码篇-使用GDataXMLNode解析XML数据

在实际的开发中数据解析是很普遍的事,一般网络请求返回的数据有两种格式:XML和JSON。关于JSON的解析已是主流,满大街的解析方式。而XML的数据格式确实是很...

14910
来自专栏小李刀刀的专栏

[译]Laravel 5.0 之 Middleware (Filter-Style)

本文译自 Matt Stauffer 的系列文章. ---- 如果你有阅读我之前的 Laravel 5.0 系列文章,你可能已经注意到路由过滤器(route f...

36040
来自专栏程序员的SOD蜜

单数据库,多数据库,单实例,多实例不同情况下的数据访问效率测试

最近公司的项目准备优化一下系统的性能,希望在数据库方面看有没有提升的空间,目前压力测试发现数据库服务器压力还不够大,Web服务器压力也不是很大的情况下,前台页面...

275100

扫码关注云+社区

领取腾讯云代金券