springboot自定义拦截器
之前使用过滤器实现了拦截没有登录的请求,现在使用springboot的拦截器实现
1.LoginCheckInterceptor.java
package com.minqiliang.interceptor;
import com.alibaba.fastjson.JSONObject;
import com.minqiliang.pojo.Result;
import com.minqiliang.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component // 注入到spring容器
@Slf4j // 日志
public class LoginCheckInterceptor implements HandlerInterceptor {
// 拦截器,拦截所有请求,判断是否登录
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 获取token
String token = request.getHeader("token");
// 如果没有token,返回未登录信息
if(!StringUtils.hasLength(token)){
log.info("请求头token为空,直接返回未登录的信息");
Result error = Result.error("NOT_LOGIN");
// 转为json
String jsonString = JSONObject.toJSONString(error);
// 输出流返回数据
response.getWriter().write(jsonString);
return false;
}
// 存在token,解析token,如果解析报错,则token无效,未登录信息
try {
JwtUtils.parseJWT(token);
}catch (Exception e){
e.printStackTrace();
log.info("令牌解析失败,直接返回未登录的信息");
Result error = Result.error("NOT_LOGIN");
String jsonString = JSONObject.toJSONString(error);
response.getWriter().write(jsonString);
return false;
}
// 未捕获到异常,放行
log.info("token合法,放行");
return true;
}
@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 {
}
}
2.WebConfig.java
package com.minqiliang.config;
import com.minqiliang.interceptor.LoginCheckInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
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 WebConfig implements WebMvcConfigurer {
@Autowired
private LoginCheckInterceptor loginCheckInterceptor;
// 注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 拦截所有请求,除了登录
registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**").excludePathPatterns("/login");
}
}
作者:minqiliang
出处:https://www.cnblogs.com/minqiliang/p/17419390.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY