Python 官方文档:入门教程 => 点击学习
在工作中我们经常需要做登录拦截验证或者其他拦截认证功能,基于SpringBoot项目下我们很容易想到结合Redis做的分布式拦截,把用户登录或者需要验证的信息放到redis里面。但是
在工作中我们经常需要做登录拦截验证或者其他拦截认证功能,基于SpringBoot项目下我们很容易想到结合Redis做的分布式拦截,把用户登录或者需要验证的信息放到redis里面。但是在写拦截器的时候发现redisTemplate一直无法注入进来,最后查资料才发现springboot拦截器是在Bean实例化之前执行的,所以Bean实例无法注入。
先看下问题,新建一个拦截器,然后注入redisTemplate
@Component
public class AccessLimitIntercept implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(AccessLimitIntercept.class);
@Autowired
private StringRedisTemplate redisTemplate;
@Override
public boolean preHandle(httpservletRequest request, HttpServletResponse response, Object handler) throws Exception {
try {
String test = redisTemplate.opsForValue().get("test");
logger.info(test);
} catch (Exception e) {
logger.error("api请求限流拦截异常,异常原因:", e);
throw new ParameterException(e);
}
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 {
}
private boolean setResponse(Results results, HttpServletResponse response) throws IOException {
ServletOutputStream outputStream = null;
try {
response.setHeader("Content-type", "application/JSON; charset=utf-8");
outputStream = response.getOutputStream();
outputStream.write(jsonUtil.toJson(results).getBytes("UTF-8"));
} catch (Exception e) {
logger.error("setResponse方法报错", e);
return false;
} finally {
if (outputStream != null) {
outputStream.flush();
outputStream.close();
}
}
return true;
}
}
然后配置拦截器,新建一个拦截器config类,我们这里让所有的url都拦截
@Configuration
public class WEBFilterConfig implements WebmvcConfigurer {
@Override
public void addInterceptors(InterceptorReGIStry registry) {
registry.addInterceptor(new AccessLimitIntercept()).addPathPatterns("
@Bean
public AccessLimitIntercept getAccessLimitIntercept() {
return new AccessLimitIntercept();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getAccessLimitIntercept()).addPathPatterns("/**");
}
}
使用postman再次请求就可以访问到
到此这篇关于springboot拦截器无法注入redisTemplate的解决方法的文章就介绍到这了,更多相关springboot拦截器无法注入redisTemplate内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: springboot拦截器无法注入redisTemplate的解决方法
本文链接: https://lsjlt.com/news/129240.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0