SpringMVC给控制器添加自定义注解控制访问权限
来源:互联网 发布:程序员自我评价幽默 编辑:程序博客网 时间:2024/04/29 02:18
1、创建自定义组件
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 "";}
2.在Controller中使用该自定义注解
@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.创建拦截器获得所有注解,然后创建和修改注解数据
/** * */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;@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName)throws BeansException {return bean;}@Overridepublic 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>
具体代码解释后期整理!
有疑问请下方留言!
1 0
- SpringMVC给控制器添加自定义注解控制访问权限
- SpringMVC给控制器添加自定义注解控制访问权限
- SpringMVC给控制器添加自定义注解控制访问权限(未测试)
- [SpringMVC]自定义注解实现控制器访问次数限制
- [SpringMVC]自定义注解实现控制器访问次数限制
- [SpringMVC]自定义注解实现控制器访问次数限制
- [SpringMVC]自定义注解实现控制器访问次数限制(转载)
- 自定义注解,控制权限。
- spring mvc使用自定义注解控制访问权限
- Yii-控制器- accessRules访问权限控制
- springMVC 注解+枚举方式实现权限控制
- springMVC基于注解的权限控制
- 通过JDK动态代理和自定义注解来控制方法级别的权限访问
- 给Elasticsearch 和Kibana添加基于角色的访问权限控制
- 细粒度 自定义注解 权限控制具体实现
- 细粒度 自定义注解 权限控制具体实现
- 自定义注解+拦截器实现权限控制
- 自定义注解+拦截器实现权限控制
- iTextSharp5.0页眉页脚及Asp.net预览的实现(PDF导出)
- 输入错误,catch 无限循环
- 小程序WXML之条件渲染
- Python串口发送HEX数组
- github学习--本地仓库同步github远程仓库出现的问题
- SpringMVC给控制器添加自定义注解控制访问权限
- Part 7 - Setting an item selected when an asp.net mvc dropdownlist is loaded
- 参数个数可变函数
- 判别学习算法和生成学习算法
- XCode8的一些权限控制,添加以免引起崩溃
- 相对熵(互熵,交叉熵,鉴别信息,Kullback熵,Kullback-Leible散度即KL散度)的深入理解
- angularjs——模块化与mvc
- 转载 Python调用Linux下的动态库(.so)
- codevs 1021 玛丽卡