springBoot添加自定义拦截器
文章目录前言步骤如下:首先新建一个自己的拦截器其次 把自己的拦截器注册到spring中 让其生效前言新的项目需要校验用户是否登录 在springBoot项目中添加一个自定义的拦截器拦截到所有请求进行逻辑判断步骤如下:首先新建一个自己的拦截器自己的拦截器需要实现HandlerInterceptor 接口 并重写自己需要的方法 preHandle 在请求实际到达controller之前拦截校验impo
·
前言
新的项目需要校验用户是否登录 在springBoot项目中添加一个自定义的拦截器拦截到所有请求进行逻辑判断
步骤如下:
首先新建一个自己的拦截器
自己的拦截器需要实现HandlerInterceptor 接口 并重写自己需要的方法 preHandle 在请求实际到达controller之前拦截校验
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @author liang
*/
public class ApiLoginInterceptor implements HandlerInterceptor {
private final Logger logger = LoggerFactory.getLogger(ApiLoginInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
//进行一些你自己的业务校验 如果校验失败了 用 returnJson向response写入返回的内容
if (true){
returnJson(response,new ResultVO(ResultEnum.SYS_OPERATE_FAIL));
return false;
}
return true;
}
private void returnJson(HttpServletResponse response, ResultVO resultVO) {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
try (PrintWriter writer = response.getWriter()) {
String res = JSONObject.toJSONString(resultVO);
writer.print(res);
} catch (IOException e) {
logger.error("exception:", e);
}
}
}
其次 把自己的拦截器注册到spring中 让其生效
实现WebMvcConfigurer类 并将类用@Configuration注解标注 他为一个配置类 实际是包含了@Component注解将此类注入到了spring容器中
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.WebMvcConfigurer;
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
@Bean
public ApiLoginInterceptor apiLoginInterceptor(){
return new ApiLoginInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(apiLoginInterceptor()).addPathPatterns("/api/**")
.excludePathPatterns("/api/haha/he");
}
}
注意addPathPatterns是拦截器需要拦截的请求路径 支持通配符格式的匹配,也支持全路径 excludePathPatterns是不进行拦截的请求路径,匹配模式相同 这里也可以不用这两个属性而是自己写一个自定义注解 在自定义的拦截器中判断方法是否有注解来决定是否放行(注意路径里面不要写项目的context-path他是从context-path之后开始匹配的)
更多推荐
已为社区贡献1条内容
所有评论(0)