前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springMVC系列(五)——springMVC拦截器实现接口访问日志

springMVC系列(五)——springMVC拦截器实现接口访问日志

作者头像
逝兮诚
发布2019-10-30 13:14:21
8000
发布2019-10-30 13:14:21
举报
文章被收录于专栏:代码人生代码人生

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/luo4105/article/details/72327144

业务需求

记录访问接口的机器信息、ip地址、时间等数据并存储在数据库表中,要求对原代码没有入侵性,机器信息放在请求的中。

1.接口访问日志表mb_accesslog

代码语言:javascript
复制
CREATE TABLE`mb_accesslog`(
 `id` int(11) NOTNULLAUTO_INCREMENT,
 `ip` varchar(20) NOTNULLCOMMENT 'IP',
 `code`varchar(20) NOT NULL COMMENT 'Code',
 `mac` varchar(20) NOTNULLCOMMENT 'Mac',
 `account`varchar(20) NOT NULL COMMENT 'Account',
 `model`varchar(50) DEFAULT NULL COMMENT '机型',
 `accesstime`datetimeNOTNULLCOMMENT '访问时间',
 `resource`varchar(100) NOT NULL COMMENT '访问资源',
 PRIMARYKEY(`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1261 DEFAULT CHARSET=utf8;

2.拦截器AccesslogInterceptor,拦截器类必须实现HandlerInterceptorAdapter类,preHandle方法是拦截在访问开始前。

代码语言:javascript
复制
@Component
public classAccesslogInterceptor extends HandlerInterceptorAdapter {
    @Autowired
    private AccesslogService accesslogService;
 
    public booleanpreHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
           throws Exception {
       Stringip = request.getRemoteAddr();
       Stringcode= (String)request.getAttribute("code");
       Stringmac= (String)request.getAttribute("mac");
       Stringaccount= (String)request.getAttribute("account");
       Dateaccesstime= newDate();
       Stringresource= request.getRequestURI().split("/")[2];
       Accesslogaccesslog= newAccesslog(ip, code, mac, account, null, accesstime, resource);
       accesslogService.insertOne(accesslog);
       return true;
    }
}

3.配置拦截器

代码语言:javascript
复制
<mvc:interceptors>     
   <mvc:interceptor>
       <mvc:mapping path="/bls/*"/><!-- 如果不配置或/*,将拦截所有的Controller -->
       <bean class="com.yoostar.support.interceptor.AccesslogInterceptor"/>
   </mvc:interceptor>
</mvc:interceptors>

4.编写测试类,通过get访问

代码语言:javascript
复制
@Test
public voidtestPost() throwsIOException {
    Stringurl= "http://localhost:8080/study_ssmvc/bls/test.m3u8";
    Stringparam= "code=1&mac=2&account=12";
    URLrealUrl= newURL(url);
    URLConnectionuc = realUrl.openConnection();
    // 发送POST请求必须设置如下两行
    uc.setDoOutput(true);
    uc.setDoInput(true);
    OutputStreamos = uc.getOutputStream();
    PrintWriterout= newPrintWriter(os);
    out.print(param);
    out.flush();
   // 定义BufferedReader输入流来读取URL的响应
    BufferedReaderin = new BufferedReader(
            new InputStreamReader(uc.getInputStream()));  //这里才开始访问
   String line;
   String result= "";
   while((line= in.readLine()) != null) {
        result += line + "\n";
   }
   System.out.println(result);
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档