page contents

自定义注解属性动态赋值

Pack 发布于 2020-02-18 17:01
阅读 689
收藏 0
分类:Java开发

需求描述:

通过自定义注解@UserAuth,拦截器方式实现对请求权限的验证。其中@UserAuth中有一个属性String[] funCode() default {},该值为权限编码。拦截器中通过该值和登录用户的信息,判断用户是否拥有该权限。该属性我想通过properties配置文件动态配置,例:

config

@Component

@ConfigurationProperties(prefix="auth")

public class MyProperties{

    private String code;

}

controller

@Autowired

private MyProperties properties;


@UserAuth(funCode = properties.code)

public String hello(){

    //...

}

问题描述:

想实现类似上面的功能,但是注解属性赋值不能这么写,会出错Attribute value must be constant。

解决思路:

@ConfigurationProperties能不能用于枚举?可以的话怎么写?自定义注解的属性可以用枚举赋值。或者有没有其他更好的思路。最好能贴上伪代码。

391
Pack
Pack

注解用占位符呀,拦截器bean注入下上文环境:

@Autowired
ConfigurableEnvironment environment;
@UserAuth(funCode = "${auth.key}")
public String hello(){
//do anything
}

用:environment.resolvePlaceholders("${auth.key}");解析占位符,可以在应用启动把解析的结果缓存。

请先 登录 后评论