为了账号安全,请及时绑定邮箱和手机立即绑定

在SpringBoot中如何配置基础拦截器

/ 猿问

在SpringBoot中如何配置基础拦截器

慕的地8271018 2019-03-03 14:04:05

在SpringBoot中如何配置基础拦截器


查看完整描述

1 回答

?
qq_花开花谢_0

所有的开发之中拦截器一定是一个必须要使用的功能,利用拦截器可以更加有效的实现数据的验证处理,而且最为幸运的是在SpringBoot之中所使用的拦截器与Spring中的拦截器完全一样。

基础拦截器操作

拦截器是一种AOP操作实现,那么在AOP之中用户一定不需要去关注拦截器的存在,用户只需要按照自己已经习惯的处理方式进行代码的编写即可。

创建一个程序的控制器类:

package com.gwolf.controller;

import com.gwolf.util.controller.AbstractBaseController;

import com.gwolf.vo.Member;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

@Controller

public class MemberController extends AbstractBaseController{

@RequestMapping(value="/member_add_pre", method = RequestMethod.GET)

public String memberAddPre() {

return "member_add";

}

@RequestMapping(value="/member_add", method = RequestMethod.POST)

@ResponseBody

public Object memberAdd(Member member) {

return member;

}

}

定义一个member_add.html的页面实现表单定义:

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">

<head>

<title>SpringBoot模板渲染</title>

<link rel="icon" type="image/x-icon"

href="/images/baidu.ico" />

<meta http-equiv="content-type" 

content="text/html;charset=UTF-8" />

</head>

<body>

<form th:action="@{/member_add}" method="post">

用户编号:<input type="text" name="mid" value="101">

用户姓名:<input type="text" name="name" value="SMITH">

<input type="submit" value="表单提交">

</form>

</body>

</html>

此时一个正常的MVC的代码就实现完成了,随后需要编写一个拦截器对其进行控制。为了更好的说明问题,现在将拦截器定义在外包中:

package com.gwolf.util;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.web.method.HandlerMethod;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class MyInterceptor implements HandlerInterceptor{

private Logger log = LoggerFactory.getLogger(MyInterceptor.class);

@Override

public boolean preHandle(HttpServletRequest request, 

HttpServletResponse response, Object handler) throws Exception {

HandlerMethod handlerMethod = (HandlerMethod)handler;


this.log.info("[****MyInterceptor.preHandle****" + handlerMethod.getBean().getClass().getSimpleName());

return true;

}

@Override

public void postHandle(HttpServletRequest request,

HttpServletResponse response, Object handler,

ModelAndView modelAndView) throws Exception {

HandlerMethod handlerMethod = (HandlerMethod)handler;

this.log.info("[****MyInterceptor.postHandle****" + handlerMethod.getBean().getClass().getSimpleName());

this.log.info("[****MyInterceptor.postHandle****" + modelAndView);

}

@Override

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

HandlerMethod handlerMethod = (HandlerMethod)handler;

this.log.info("[****MyInterceptor.afterCompletion****拦截结束" );

}

}

那么此时如果要想使用拦截器则必须有一个拦截器的配置类。现在不再编写配置文件了,所有的配置直接利用一个类完成。

package com.gwolf.config;

import com.gwolf.util.MyInterceptor;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.InterceptorRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

//定义mvc配置

@Configuration

public class MyWebApplicationConfig extends WebMvcConfigurerAdapter{

@Override

public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");

super.addInterceptors(registry);

}

}

 


查看完整回答
反对 回复 2019-03-10

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信