SpringMVC的接口鉴权

本文介绍了SpringMVC中的拦截器实现接口鉴权的过程,包括拦截器的基本概念、工作流程、具体实现步骤,以及如何通过拦截器进行权限验证。通过自定义拦截器类,实现HandlerInterceptor接口,并在配置文件中注册,实现对特定Controller方法的拦截。文章还探讨了preHandle、postHandle和afterCompletion三个方法的作用,并展示了实际操作中如何配置和验证拦截效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作中,我们肯定都会接触到拦截器,但是经常在拦截的过程中出现各种问题,比如拦截之后,静态资源也被拦截,结合AOP的时候起不到作用,或者拦截根本没有生效。用SpringMVC的小伙伴肯定深有感受,接下来,我们一起整理一遍拦截器及AOP。

1.什么是拦截器

在SpringMVC中用于拦截请求的代码。由于SpringMVC的视图解析器的存在,在拦截请求到处理请求再到返回视图中间有两个间隙,interceptor提供了preHandle和postHandle以及afterCompletion三个方法。preHandle调用controller具体方法之前调用,postHandle完成具体方法之后调用,afterCompletion完成对页面的render以后调用,至此整个页面渲染完成。也就是说我们在preHandle记录开始的时间,在afterCompletion记录结束的时间,就可或者整个页面生成的时间。

 

2.步骤和流程

步骤:

第一步:自定义一个实现了Interceptor接口的类,或者继承抽象类AbstractInterceptor。这里继承了HandlerInterceptor接口
    第二步:在配置文件中注册定义的拦截器。
    第三步:在需要使用Controller中编写业务逻辑

接下来就看具体实践:

3.具体实现

1 自定义拦截器类,实现HandlerInterceptor接口

2 实现preHandle方法,此处校验的是app_id和app_secret是否合法

3 在configuration类中注册拦截器,定义生效的规则

4 编写Controller代码

接下来就简单Demo一个例子:使用Spring5.x

1.导包:

2.配置web.xml,只需要配置一个分发器就行了:

3.写controller和interceptor拦截器

HandlerInterceptor其实一共3个方法,都是默认方法,需要Ctrl进去方法里面copy出来即可。

4.配置applicationContext.xml

注意事项:目录结构必须正确,applicationContext.xml文件需要放在src的根目录下,不能随意摆放,否则就会报找不到文件的错误。

可以配置多个<mvc:interceptor>,然后会按顺序去拦截

5.验证并给出结论:

输入URL:http://localhost/thisisturemethod.action

打印的日志为:

验证了我们的结论,确实拦截了,那另一个我没有配置的方法会不会被拦截呢?

执行下:http://localhost/thisisfalse.action

打印日志为:

确实没有被拦截,如果没有配置就不会被拦截,这样也实现了方法拦截的效果!!

 

但是还有一个点肯定很疑惑,perhandler里面request和response参数都好理解,但是还有一个Object handler参数,这是什么东西呢?

输出之后我们发现,就是方法的全名:

这些还是不够,因为我return true;就会进入方法执行,但是return false我会跳到哪里去呢???

这个时候就会根据response来产生响应,如果response没有东西,那么返回的response就是null,但是如果response里面加入了需要的参数,就会返回response给到前端渲染失败之后的界面,所以需要看前端需要什么数据,比如Map,String,一般都是这些:

    List<HashMap<String, Object>> mapList= new ArrayList<HashMap<String, Object>>();
      response.setCharacterEncoding("UTF-8");    
      response.setContentType("application/json;charset=UTF8");
      PrintWriter writer = response.getWriter();
      writer.write(JSON.toJSONString(mapList));
      writer.close();

主要是要设置一下报文头的返回格式application/json,就可以指定返回的格式了。

 

希望这对你有帮助,更进一步了解SpringMVC的拦截

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值