1、首先需要确定拦截器的位置,拦截器拦截当前目录以及所有子目录(递归)。
package com.test.interceptor; import org.springframework.context.annotation.Bean; 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 Interceptor extends WebMvcConfigurerAdapter { //拦截器类,用来拦截/interceptorService/regionalLevel接口 @Bean public LoginPermissionInterceptor getLoginInterceptor() { return new LoginPermissionInterceptor(); } //拦截器类,用来拦截除了/interceptorService/regionalLevel接口的所有接口 @Bean public RequestPermissionInterceptor getRequestInterceptor() { return new RequestPermissionInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { // 拦截器的路径 addPathPatterns("/**")配置拦截路径,其中/**表示当前目录以及所有子目录(递归),/* registry.addInterceptor(getLoginInterceptor()).addPathPatterns("/interceptorService/regionalLevel"); //拦截器的路径 addPathPatterns("/**"),excludePathPatterns("/interceptorService/regionalLevel")除了这个接口 registry.addInterceptor(getRequestInterceptor()).addPathPatterns("/**") .excludePathPatterns("/interceptorService/regionalLevel"); // super.addInterceptors(registry); } }2、获取Header中的信息,进行具体处理。
package com.test.interceptor; import java.util.Calendar; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import com.test.interceptor.service.IInterceptorService; @Component public class LoginPermissionInterceptor implements HandlerInterceptor { Logger logger = LoggerFactory.getLogger(LoginPermissionInterceptor.class); @Autowired private IInterceptorService interceptorService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { // 添加要返回的非业务字段 response.addHeader("requestTime", String.valueOf(Calendar.getInstance().getTimeInMillis())); System.out.println("进入登录拦截器-----------"); // 获取parentRegion String token = request.getHeader("token"); //判断是否有空格,null等 if(!StringUtils.isNotBlank(token)) { //返回401 response.setStatus(HttpStatus.UNAUTHORIZED.value()); return false; } System.out.println("登录拦截器获取到Header中参数:" + token); //获取地区级别的方法,可以自己编写实现。 Map<String, Object> data = interceptorService.getRegionalLevel(token); //获取到权限信息存入session request.getSession().setAttribute("region",data.get("region")); request.getSession().setAttribute("level",data.get("level")); return true; } @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { } }1、编写controller、service、dao、mapper等,实现interceptorService/regionalLevel接口请求操作。 然后通过postman测试该接口,携带header信息,发送请求,可以正常通过拦截器。如果不懈怠header,会报401。(浏览器测试结果明显)。
①controller类
②service类 登录方法通过拦截器后返回结果,方法如下:
③dao类 ④mapper.xml
温馨提示: 本人联系方式: QQ:961094233 邮箱:961094233@qq.com