如何在Shiro的PermissionsAuthorizationFilter中读取@Value值
要使Shiro的PermissionsAuthorizationFilter能够读取@Value的值,你需要进行以下步骤:\n\n1. 在你的配置类上添加@EnableAspectJAutoProxy注解,以启用AspectJ代理。\n2. 创建一个切面类,用于将@Value注入到Shiro过滤器中。\n3. 在切面类中,使用@Around环绕通知来拦截Shiro过滤器的方法调用。\n4. 在环绕通知中,使用Spring的AopProxyUtils.ultimateTargetClass方法来获取真正的过滤器对象。\n5. 使用反射来设置过滤器对象中的@Value字段的值。\n\n下面是一个示例:\n\njava\n@Configuration\n@EnableAspectJAutoProxy\npublic class ShiroConfig {\n\n @Bean\n public PermissionsAuthorizationFilter permissionsAuthorizationFilter() {\n return new PermissionsAuthorizationFilter();\n }\n\n @Bean\n public ShiroFilterFactoryBean shiroFilterFactoryBean() {\n // 配置ShiroFilterFactoryBean\n ...\n }\n\n @Bean\n public DefaultWebSecurityManager securityManager() {\n // 配置SecurityManager\n ...\n }\n}\n\n@Aspect\n@Component\npublic class ShiroFilterAspect {\n\n @Value("${your.property.key}")\n private String yourPropertyValue;\n\n @Around("execution(* org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter.*(..))")\n public Object injectValueToFilter(ProceedingJoinPoint joinPoint) throws Throwable {\n Object target = AopProxyUtils.ultimateTargetClass(joinPoint.getTarget());\n Field field = target.getClass().getDeclaredField("yourField");\n field.setAccessible(true);\n field.set(target, yourPropertyValue);\n\n return joinPoint.proceed();\n }\n}\n\n\n请确保将your.property.key替换为你自己的属性键,并将yourField替换为你想要注入值的字段名。
原文地址: https://www.cveoy.top/t/topic/pKpd 著作权归作者所有。请勿转载和采集!