用自定义注解,给参数赋值

业务场景:
之前系统中页面上选择的站点默认的是全部的,现在要增加权限功能,只有用户有权限的站点才显示到页面上。为了最小限度的修改代码,决定用注解的方式对站点参数统一整理后再赋值

主要用到的是SpringMvc的HandlerMethodArgumentResolver接口和自定义注解类

1.创建自定义注解:

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface SiteAuthority {

}

2.实现HandlerMethodArgumentResolver接口

public class SiteAuthorityHandlerMethodArgumentResolver  implements HandlerMethodArgumentResolver{
	
	@Autowired
	AuthorityService authorityService;
	
	@Value("${authorityControlSwitch}")
	private String authorityControlSwitch;

	/* (non-Javadoc)
	 * @see org.springframework.web.method.support.HandlerMethodArgumentResolver#supportsParameter(org.springframework.core.MethodParameter)
	 */
	@Override
	public boolean supportsParameter(MethodParameter parameter) {
		// TODO Auto-generated method stub
		if (parameter.hasParameterAnnotation(SiteAuthority.class)) {
            return true;
        }
        return false;
	}

	/* (non-Javadoc)
	 * @see org.springframework.web.method.support.HandlerMethodArgumentResolver#resolveArgument(org.springframework.core.MethodParameter, org.springframework.web.method.support.ModelAndViewContainer, org.springframework.web.context.request.NativeWebRequest, org.springframework.web.bind.support.WebDataBinderFactory)
	 */
	@Override
	public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
		// 先获取系统中的所有站点
		List<MtSite> allSiteList = MtSiteManager.getInstance().getSites();
		//在判断权限控制开关,如果开启,则先获取有权限的站点,然后返回给参数
		if(AuthorityControlSwitch.OPEN.getKey().equals(authorityControlSwitch)){
			Map<String, MtSite> allSiteMap = new HashMap<String, MtSite>();
			for (MtSite mtSite : allSiteList) {
				allSiteMap.put(mtSite.getCode(), mtSite);
			}

			//HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
			UurSessionEntity systemUser = (UurSessionEntity) SystemUserLoacl.getSystemUser();
			List<String> sitCodeList= authorityService.getSiteCodeAuthorityByUser(systemUser.getUserName());
			List<MtSite> authoritySites = new ArrayList<MtSite>();
			for (String siteCode : sitCodeList) {
				MtSite mtSite= allSiteMap.get(siteCode);
				if (null != mtSite) {
					authoritySites.add(mtSite);
				}
			}
			return authoritySites;
		}
		return allSiteList;
	}

}

3.再xml里进行配置

<mvc:annotation-driven>
	    <mvc:argument-resolvers>
            <bean class="com.cas.platform.web.common.interceptor.SiteAuthorityHandlerMethodArgumentResolver"></bean>
        </mvc:argument-resolvers>
</mvc:annotation-driven>

4controller层对站点参数代码进行改造

改造之前:

public String showCalendarAnalysisPage(Model model) {
		// 这种方式获取的全部站点,没有使用权限
		List<MtSite> siteList = MtSiteManager.getInstance().getSites();
		}

改造之后:

//把参数放在入参,同时加上自定义注解,通过SiteAuthorityHandlerMethodArgumentResolver 类,对所有站点数据进行处理,从而实现权限的增加
public String showCalendarAnalysisPage(Model model,@SiteAuthority List<MtSite> siteList){
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值