一、目标:拦截接口做相应操作
二、项目结构
三、代码
配置类:MyMvcConfig.java
package com.yhw.config;//使用WebMvcConfigurerAdapter可以来扩展SpringMVC的功能
import com.yhw.interceptor.LoginHandlerInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {
//注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//SpringBoot已经做好了静态资源(*.css , *.js)映射不拦截
registry.addInterceptor(new LoginHandlerInterceptor())
//拦截所有
.addPathPatterns("/**")
//排除 /login
.excludePathPatterns("/login");
}
}
控制层:UserController.java
package com.yhw.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* 描述该类- JPA
*
* @author zhoufei
* @class: UserController
* @date 2021/1/13 16:50
* @Verson 1.0 -2021/1/13 16:50
* @see
*/
@RestController
public class UserController {
@RequestMapping("/login")
public Object login() {
Map<String,String> map=new HashMap<>();
map.put("userName", "小明");
return map;
}
@RequestMapping("/getById")
public Object getById() {
Map<String,String> map=new HashMap<>();
map.put("userName", "小明");
return map;
}
}
拦截器:LoginHandlerInterceptor.java
package com.yhw.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintWriter;
/**
* 登陆检查,
*/
public class LoginHandlerInterceptor implements HandlerInterceptor {
//目标方法执行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURL = request.getRequestURL().toString() + "该地址被拦截";
System.out.println("requestURL:"+requestURL);
//false时,拦截器执行到此处将不会继续操作,方法失效
//true时,继续执行改地址所做的
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
四、运行效果,拦截了getById,在控制台输出
拦截getById,由于LoginHandlerInterceptor类中preHandle中return false,所以该地址对应方法作废,不做处理。