拦截器在springboot项目和ssm架构项目的应用

1.拦截器的主要功能

在访问某节点url前拦截客户端发来的请求,判断该请求是否符合自己定义的要求,如果不符合,返回false,该节点url的对应代码不会被执行;如果符合,返回true,可以执行该节点url。

2.在springboot项目中的应用方法

假设有这么一个场景:某电商网站的商品必须登陆后才能查看内容,否则无法进入商品页,那么处理方法就是使用拦截器,具体如下:

创建一个类,命名LoginIntercepter ,该类实现HandlerInterceptor接口,该类上加上@Component注解,加载进spring容器中

实现接口后,有三个方法需要我们处理,分别是preHandle,postHandle,afterCompletion;其中preHandle是访问controller接口之前执行的,在这里我们要写相关逻辑,判断登录状态;postHandle调用前提是preHandle返回true,它是在controller接口方法执行完毕和DispatcherServlet进行视图的渲染之前进行的;afterCompletion用于DispatcherServlet进行视图的渲染之后,多用于清理资源。这里主要用preHandle方法,代码如下:

//这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了

@Override

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

//每一个项目对于登陆的实现逻辑都有所区别,我这里使用最简单的Session提取User来验证登陆。

    HttpSession session = request.getSession();

//这里的User是登陆时放入session的

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

//如果session中没有user,表示没登陆

    if (user ==null){

//这个方法返回false表示忽略当前请求,如果一个用户调用了需要登陆才能使用的接口,如果他没有登陆这里会直接忽略掉

//可以重定向到登录接口,让为登录的用户去先登录

        response.sendRedirect("/luckmoney/nongyebank");

return false;

}else {

return true;//如果session里有user,表示该用户已经登陆,放行,用户即可继续调用自己需要的接口

    }

}

至于postHandle和afterCompletion可以不写。

下面开始配置拦截器,代码如下:

@Configuration   //生命配置类,该类实现WebMvcConfigurer 接口

public class WebConfigurer implements WebMvcConfigurer {

@Autowired

    private LoginIntercepter  loginIntercepter;  //注入自己写的拦截器

// 这个方法是用来配置静态资源的,比如html,js,css,等等

    @Override

    public void addResourceHandlers(ResourceHandlerRegistry registry) {

}

// 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效,addPathPatterns("/**")即是添加的拦截路径,也就是拦截controller的所有接口;.excludePathPatterns("/nongyebank","/login")即是放行的controller接口,这些接口不会被拦截,常用的登录接口和注册接口等不必拦截。

    @Override   

    public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(loginIntercepter).addPathPatterns("/**").excludePathPatterns("/nongyebank","/login");

}

}

这样springboot的拦截器配置完成,这是一个登录的拦截器,目的是防止用户跨过登录直接访问其他内容。

2.在ssm架构项目中的应用方法

ssm架构项目就是spring,springmvc,mybaties的整合,这里的拦截器,主要是在xml中配置的,但是,自己也要定义一下拦截器

假设还是登录拦截的需求,自己写的拦截器和上一个springboot项目的一样,只是在配置上不一样了,springboot用的是注解形式来配置自己的拦截器,而ssm则是在xml中配置,这里是在spring-mvc.xml中配置拦截器:

配置如下

<mvc:interceptors>

<mvc:interceptor>

<!--

/**的意思是所有文件夹及里面的子文件夹

/*是所有文件夹,不含子文件夹

/是web项目的根目录

-->

        <mvc:mapping path="/**" />


        <mvc:exclude-mapping path="/aileqi/user"/>

<mvc:exclude-mapping path="/aileqi/register"/>

<mvc:exclude-mapping path="/img/*"></mvc:exclude-mapping>

<mvc:exclude-mapping path="/js/*"></mvc:exclude-mapping>

<bean id="commonInterceptor" class="com.ssm.intercepter.MemberIntercepter"></bean>

    </mvc:interceptor>


</mvc:interceptors>

这里,放行的仍然是注册登录和js,img等静态资源,用<bean>标签将自己写的拦截器注入spring容器中,运行项目,可以发现只有放行的接口可以访问,其他的需要在登录后才能访问。

这样,拦截器在springboot项目和ssm架构项目的应用就简单实现了。

另外:如果配置多个拦截器,preHandle方法会按照配置的顺序顺序执行,而postHandle和afterCompletion是逆序执行的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容