SpringMVC给控制器添加自定义注解控制访问权限

  1. 1、创建自定义组件  
1、创建自定义组件
  1. package com.qingbo.ginkgo.annotation;  
  2.   
  3. import java.lang.annotation.Documented;  
  4. import java.lang.annotation.ElementType;  
  5. import java.lang.annotation.Inherited;  
  6. import java.lang.annotation.Retention;  
  7. import java.lang.annotation.RetentionPolicy;  
  8. import java.lang.annotation.Target;  
  9.   
  10.   
  11. @Documented  
  12. @Inherited  
  13. @Retention(RetentionPolicy.RUNTIME)  
  14. @Target({ElementType.METHOD, ElementType.TYPE})  
  15. public @interface MenuO {  
  16.     /** 菜单名称 */  
  17.     String name();  
  18.     /** 菜单Code */  
  19.     String code();  
  20.     /** 父菜单Code */  
  21.     String parent() default "--";  
  22.     /** 等级  */  
  23.     int leven() default 1;  
  24.     /** 事件类型link,affiliated  */  
  25.     String clickType();  
  26.     /** 菜单类型 */  
  27.     String type();  
  28.     /** 菜单权限类型 */  
  29.     int power() default 0;  
  30.     /** 排序 */  
  31.     int order() default 999;  
  32.     /** 图标 */  
  33.     String iconCls();  
  34.     /** 是否在列表显示0显示,1隐藏 */  
  35.     int isShow() default 0;  
  36.     /** 菜单的唯一标示**/  
  37.     String iconName();  
  38.     /** 备注 */  
  39.     String remark() default "";  
  40. }  
package com.qingbo.ginkgo.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface MenuO {
	/** 菜单名称 */
	String name();
	/** 菜单Code */
	String code();
	/** 父菜单Code */
	String parent() default "--";
	/** 等级  */
	int leven() default 1;
	/** 事件类型link,affiliated  */
	String clickType();
	/** 菜单类型 */
	String type();
	/** 菜单权限类型 */
	int power() default 0;
	/** 排序 */
	int order() default 999;
	/** 图标 */
	String iconCls();
	/** 是否在列表显示0显示,1隐藏 */
	int isShow() default 0;
	/** 菜单的唯一标示**/
	String iconName();
	/** 备注 */
	String remark() default "";
}
  1. 2.在Controller中使用该自定义注解  
2.在Controller中使用该自定义注解
  1. @RequestMapping("facade")  
  2. @MenuO(name="代理商管理",code="agent-facade",parent="information-manager",type = MenuType.TYPE_WEB,leven=1,clickType=MenuType.LEVEN_LINK,iconName="agent",remark="平台", iconCls = "icon-codepen",order=12)  
  3. public String facade(SystemUser systemUser, Model model, String vague, HttpServletRequest request){return ""}  
@RequestMapping("facade")
@MenuO(name="代理商管理",code="agent-facade",parent="information-manager",type = MenuType.TYPE_WEB,leven=1,clickType=MenuType.LEVEN_LINK,iconName="agent",remark="平台", iconCls = "icon-codepen",order=12)
public String facade(SystemUser systemUser, Model model, String vague, HttpServletRequest request){return ""}



3.创建拦截器获得所有注解,然后创建和修改注解数据

  1. /** 
  2.  *  
  3.  */  
  4. package com.qingbo.onem2.web;  
  5. import java.lang.reflect.Method;  
  6. import org.apache.commons.logging.Log;  
  7. import org.apache.commons.logging.LogFactory;  
  8. import org.dom4j.Document;  
  9. import org.springframework.beans.BeansException;  
  10. import org.springframework.beans.factory.annotation.Autowired;  
  11. import org.springframework.beans.factory.config.BeanPostProcessor;  
  12. import org.springframework.stereotype.Controller;  
  13. import org.springframework.web.bind.annotation.RequestMapping;  
  14.   
  15. import com.qingbo.ginkgo.annotation.MenuO;  
  16. import com.qingbo.ginkgo.base.service.SystemAddressService;  
  17. import com.qingbo.ginkgo.common.util.Config;  
  18. import com.qingbo.ginkgo.common.util.SimpleLogFormater;  
  19. import com.qingbo.ginkgo.helper.XmlUtil;  
  20. import com.qingbo.onem2.dto.AddressStatic;  
  21. import com.qingbo.onem2.dto.BankBinStatic;  
  22. import com.qingbo.onem2.web.biz.BankBinBizService;  
  23. import com.qingbo.onem2.web.biz.SystemFunctionBizService;  
  24.   
  25. /** 
  26.  * 资源菜单,启动初始化 
  27.  * 功能:自动读取<@Controller>层的<@Menu>注解,进行菜单的配置 
  28.  * @author 贺亮 
  29.  * 
  30.  */  
  31. public class MenuInitProcessor implements BeanPostProcessor{  
  32.     private static Log log = LogFactory.getLog(MenuInitProcessor.class);  
  33.       
  34.     @Autowired private SystemFunctionBizService systemFunctionBizService;  
  35.     @Autowired private SystemAddressService systemAddressService;  
  36.     @Autowired private BankBinBizService bankBinBizService;  
  37.       
  38.     @Override  
  39.     public Object postProcessBeforeInitialization(Object bean, String beanName)throws BeansException {  
  40.         return bean;  
  41.     }  
  42.   
  43.     @Override  
  44.     public Object postProcessAfterInitialization(Object bean, String beanName)throws BeansException {  
  45.         //如果注册的bean不属于Controller,直接跳出  
  46.         if (!bean.getClass().isAnnotationPresent(Controller.class)) {  
  47.               return bean;  
  48.         }  
  49.         //得到父地址映射  
  50.         String urlMapping = null;  
  51.         if(bean.getClass().isAnnotationPresent(RequestMapping.class)){  
  52.             RequestMapping classMapping= bean.getClass().getAnnotation(RequestMapping.class);  
  53.             urlMapping = classMapping.value()[0];  
  54.         }  
  55.         //得到Controller下的所有方法,判断是否有注册信息  
  56.         Method[] methods = bean.getClass().getDeclaredMethods();  
  57.         for(Method method:methods){  
  58.             if(method.isAnnotationPresent(MenuO.class)){  
  59.                 //开始注册信息  
  60.                 MenuO menu = method.getAnnotation(MenuO.class);  
  61.                 //log.info(SimpleLogFormater.formatResult("----->Menu<----- register local menu : "+menu.name()+":"+urlMapping));  
  62.                 //得到子地址映射  
  63.                 if(method.isAnnotationPresent(RequestMapping.class)){  
  64.                     RequestMapping methodMapping= method.getAnnotation(RequestMapping.class);  
  65.                     if(urlMapping!=null){  
  66.                         this.systemFunctionBizService.insertLocalMenu(menu,urlMapping+"/"+methodMapping.value()[0]);  
  67.                     }else{  
  68.                         this.systemFunctionBizService.insertLocalMenu(menu,methodMapping.value()[0]);  
  69.                     }  
  70.                 }  
  71.             }  
  72.         }  
  73.         //初始化静态字典  
  74.         new AddressStatic(systemAddressService);  
  75.         new BankBinStatic(bankBinBizService);  
  76.         return bean;  
  77.     }  
  78. }  
/**
 * 
 */
package com.qingbo.onem2.web;
import java.lang.reflect.Method;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.qingbo.ginkgo.annotation.MenuO;
import com.qingbo.ginkgo.base.service.SystemAddressService;
import com.qingbo.ginkgo.common.util.Config;
import com.qingbo.ginkgo.common.util.SimpleLogFormater;
import com.qingbo.ginkgo.helper.XmlUtil;
import com.qingbo.onem2.dto.AddressStatic;
import com.qingbo.onem2.dto.BankBinStatic;
import com.qingbo.onem2.web.biz.BankBinBizService;
import com.qingbo.onem2.web.biz.SystemFunctionBizService;

/**
 * 资源菜单,启动初始化
 * 功能:自动读取<@Controller>层的<@Menu>注解,进行菜单的配置
 * @author 贺亮
 *
 */
public class MenuInitProcessor implements BeanPostProcessor{
	private static Log log = LogFactory.getLog(MenuInitProcessor.class);
	
	@Autowired private SystemFunctionBizService systemFunctionBizService;
	@Autowired private SystemAddressService systemAddressService;
	@Autowired private BankBinBizService bankBinBizService;
	
	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName)throws BeansException {
		return bean;
	}

	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName)throws BeansException {
		//如果注册的bean不属于Controller,直接跳出
		if (!bean.getClass().isAnnotationPresent(Controller.class)) {
		      return bean;
		}
		//得到父地址映射
		String urlMapping = null;
		if(bean.getClass().isAnnotationPresent(RequestMapping.class)){
			RequestMapping classMapping= bean.getClass().getAnnotation(RequestMapping.class);
			urlMapping = classMapping.value()[0];
		}
		//得到Controller下的所有方法,判断是否有注册信息
		Method[] methods = bean.getClass().getDeclaredMethods();
		for(Method method:methods){
			if(method.isAnnotationPresent(MenuO.class)){
				//开始注册信息
				MenuO menu = method.getAnnotation(MenuO.class);
				//log.info(SimpleLogFormater.formatResult("----->Menu<----- register local menu : "+menu.name()+":"+urlMapping));
				//得到子地址映射
				if(method.isAnnotationPresent(RequestMapping.class)){
					RequestMapping methodMapping= method.getAnnotation(RequestMapping.class);
					if(urlMapping!=null){
						this.systemFunctionBizService.insertLocalMenu(menu,urlMapping+"/"+methodMapping.value()[0]);
					}else{
						this.systemFunctionBizService.insertLocalMenu(menu,methodMapping.value()[0]);
					}
				}
			}
		}
		//初始化静态字典
		new AddressStatic(systemAddressService);
		new BankBinStatic(bankBinBizService);
		return bean;
	}
}

4.配置拦截器
< !-- 启动执行事项 -->
<bean class="com.qingbo.onem2.web.MenuInitProcessor"></bean> 


具体代码解释后期整理!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值