SpringBoot——自定义拦截器校验认证前端token
引言
防止横向越权,前端会传递token信息到header中,后端需要对header进行鉴权验证。
代码
定义token拦截器
@Component
@Slf4j
public class TokenAuthInterceptor implements HandlerInterceptor {
/**
* token认证配置
*/
@Resource
private TokenAuthProperties tokenAuthProperties;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info(">>>>>>>>>TokenAuthInterceptor:请求前拦截认证token, 开关:{}>>>>>>>>>>>>>", tokenAuthProperties.getTokenSwitch());
if (!tokenAuthProperties.getTokenSwitch()) {
log.info("no need to auth token.");
return true;
}
String token = request.getHeader("authentication");
if (StringUtils.isBlank(token)) {
log.error("token为空,认证失败!");
throw new Exception("token为空,认证失败!");
}
// token其他验证
... ...
log.info("token: [ {} ], 认证成功!", token);
return true;
}
}
自动配置
@Configuration
public class WebAuthConfig extends WebMvcConfigurationSupport {
@Resource
TokenAuthInterceptor tokenAuthInterceptor;
/**
* addInterceptors
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(tokenAuthInterceptor).addPathPatterns("/**");
}
}
获取token的方法
//获取前端token
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//获取请求
HttpServletRequest request = attributes.getRequest();
if (StringUtils.isBlank(request.getHeader(AUTHENTICATION))) {
log.error("获取token失败!错误信息:token为空!");
throw new Exception("获取token失败!错误信息:token为空!");
}
烧不死的鸟就是凤凰
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)