千家信息网

SpringBoot自定义Shiro过滤器无法使用@Autowired怎么办

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要为大家展示了"SpringBoot自定义Shiro过滤器无法使用@Autowired怎么办",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Spr
千家信息网最后更新 2026年10月31日SpringBoot自定义Shiro过滤器无法使用@Autowired怎么办

这篇文章主要为大家展示了"SpringBoot自定义Shiro过滤器无法使用@Autowired怎么办",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"SpringBoot自定义Shiro过滤器无法使用@Autowired怎么办"这篇文章吧。

在 Spring Boot 中集成 Shiro,并使用 JWT 进行接口认证。

为了统一对 Token 进行过滤,所以自定义了一个 JwtTokenFilter 过滤器。

期间遇到了以下几个问题,这里逐一进行记录,以备日后查阅。

问题一:JwtTokenFilter 无法使用 @Autowired

因为自定义了一个 JWT Token 工具类,用来解析和创建 Token,JwtTokenFilter 中需要用到此工具类,这里本来可以直接手动进行 new 一个新的实例,但由于在 Spring 配置文件中定义了 JWT 签名密钥和过期时间,所以想使用 Spring @ConfigurationProperties 注解进行值得注入,所以这里必须不能手动 new 一个新的实例。

所以在 ShiroConfiguration 配置文件中将 JwtTokenFilter 过滤器交由 Spring 管理:

@Beanpublic JwtTokenFilter JwtTokenFilter() { return new JwtTokenFilter();}

启动项目进行测试,JwtTokenFilter 过滤器中 JwtUtil 类成功注入,但又遇到了另外一个问题。

问题二:anon 过滤器失效

在问题一解决后,登录接口一直显示需要认证,所以在只能将 ShiroFilterFactoryBean 中定义的 JwtTokenFilter 又改为原先手动 new:

@Bean(name = "shiroFilter")public ShiroFilterFactoryBean shiroFilterFactoryBean() { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager()); // 注册自定义过滤器 Map filterMap = new LinkedHashMap<>(8); // 这里只能使用 new 新建实例 filterMap.put("authc", new JwtTokenFilter()); shiroFilterFactoryBean.setFilters(filterMap); Map filterChains = new LinkedHashMap<>(8); filterChains.put("/v1/admin/login", "anon"); filterChains.put("/**", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChains); return shiroFilterFactoryBean;}

接着创建一个 Spring 的上下文管理工具类,代码如下:

package com.nwgdk.ums.common.util;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component;/** * Spring 上下文工具类 * * @author nwgdk */@Componentpublic class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContextUtil.applicationContext = applicationContext; } /** * 获取上下文 */ public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 通过 bena 名称获取上下文中的 bean */ public static Object getBean(String name) { return applicationContext.getBean(name); } /** * 通过类型获取上下文中的bean */ public static Object getBean(Class requiredType) { return applicationContext.getBean(requiredType); }}

接着,在 JwtTokenFilter 过滤器中通过以上工具类获取 JwtUtil 工具类:

if (StringUtils.isNotEmpty(jwtToken)) { if (jwtUtil == null) { jwtUtil = (JwtUtil) SpringContextUtil.getBean("jwtUtil"); }}

启动项目进行测试,成功登录。

以上是"SpringBoot自定义Shiro过滤器无法使用@Autowired怎么办"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

过滤器 工具 上下 上下文 问题 怎么办 内容 实例 手动 篇文章 成功 接口 文件 项目 学习 帮助 测试 登录 管理 认证 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 哈尔滨大商圈互联网科技有限公司 智能科技公司是互联网公司吗 互联网与科技发展 麻工互联网科技 华宇互联网科技 紫鲸互联网科技 壹账通互联网科技 互联网科技大会案例 济南华为互联网科技产业总部基地 南山科技园互联网公司有哪些 互联网科技产业特征 互联网科技大奖都有哪些公司 链环科技传统企业怎么转型互联网 健康食品互联网创新科技园项目 互联网在线教育科技创业 区块链结合互联网科技 全球科技与互联网公司市值变化 互联网科技平台产品运营 万物互联网智能科技 现代科技的标志之一的互联网 互联网科技的发展 润盈互联网科技 武汉健翔互联网络科技有限公司 互联网科技公司有风险吗 苏州铭阳互联网科技有限公司 青海科技产业互联网发展 互联网保险科技创业 广州燕处互联网科技有限公司 恒生科技指数 中概互联网 网互联网络科技
0