Spring学习总结(17)——Spring AOP权限管理
每个项目都会有权限管理系统
无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录、权限管理这些必不可少的业务逻辑。有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就算这样,但你肯定也会有后台管理及登录功能。
每个项目中都会有这些几乎一样的业务逻辑,我们能不能把他们做成通用的系统呢?
AOP 实现用户权限验证
AOP 在实际项目中运用的场景主要有 权限管理(Authority Management)、事务管理(Transaction Management)、安全管理(Security)、日志管理(Logging)和调试管理(Debugging) 等。
所以,权限验证正好我们可以使用 AOP 来直接实现。具体你项目中权限怎么管理,管理的粒度是什么级别这些完全取决于项目需要,这里完全不做任何的讨论。
先说思路: 利用自定义注解及拦截器来在你需要的时候,进行你需要的一些权限认证。 这里依然涉及到的有 enum(枚举) 、 annotation(自定义注解) 及拦截器相关知识,废话不多说,直接开写代码。
开始撸一下代码
一、建立 AuthorityType.java 枚举类
public enum AuthorityType {// 登录和权限都验证 默认Validate,// 不验证NoValidate,// 不验证权限NoAuthority;
}
这个枚举类的作用,依然是使自定义注解用起来爽到还想要。
二、新建 Authority.java 自定义注解类
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface Authority { // 默认验证AuthorityType value() default AuthorityType.Validate;}
三、再建一个 AuthorityAnnotationInterceptor.java 类
/*** 权限认证拦截器**/
public class AuthorityAnnotationInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {if (handler instanceof HandlerMethod) {HandlerMethod hm = (HandlerMethod) handler;Class<?> clazz = hm.getBeanType();Method m = hm.getMethod();try {if (clazz != null && m != null) {boolean isClzAnnotation = clazz.isAnnotationPresent(Authority.class);boolean isMethondAnnotation = m.isAnnotationPresent(Authority.class);Authority authority = null;// 如果方法和类声明中同时存在这个注解,那么方法中的会覆盖类中的设定。if (isMethondAnnotation) {authority = m.getAnnotation(Authority.class);} else if (isClzAnnotation) {authority = clazz.getAnnotation(Authority.class);}int code = -1;String msg = "";if (authority != null) {if (AuthorityType.NoValidate == authority.value()) {// 标记为不验证,放行return true;} else if (AuthorityType.NoAuthority == authority.value()) {// 不验证权限,验证是否登录// TODO:return true;} else {// 验证登录及权限// TODO:code = 1;msg = "验证成功!";return true;}}// //跳转// String url = "";// response.getWriter().write("<script>top.location.href='"// + url + "'</script>");// return false;// 未通过验证,返回提示jsonMap<String, Object> responseMap = new HashMap<String, Object>();responseMap.put("code", code);responseMap.put("msg", msg);responseMap.put("params", "");responseMap.put("rows", "");String json = new Gson().toJson(responseMap);response.setCharacterEncoding("UTF-8");response.setContentType("application/json; charset=utf-8");response.getWriter().write(json);return false;}} catch (Exception e) {}}return false;}
}
这个类的目的就是在打过 Authority 标签的方法及类上,进行权限认证。我这里分了三种类型: 全部验证、只验证登录、不验证 用来满足我们的业务需求。
这里的返回值可以是 JSON 串,也可以是跳转到相应的页面,来实现你想要的效果。
四、配置拦截器
<mvc:interceptors><!-- 权限认证拦截器 --><mvc:interceptor><mvc:mapping path="/**"/><bean class="cn.mayongfa.interceptor.AuthorityAnnotationInterceptor"></bean></mvc:interceptor>
</mvc:interceptors>
在 /WebContent/WEB-INF/springMVC-servlet.xml 文件下的 <mvc:interceptors> 节点配置就行,这里可以配置具体要拦截的 Url 。
到这里就完成了权限验证的工作了,如何使用呢?
使用就非常简单
因为我们的拦截器配置,然后我们在自定义注解的默认是验证,所以,我们只需要在类名及方法名上打标签就可以。
当然,你完全是可以在拦截器中设置默认就验证所有请求的,接着设置不验证的请求。
Spring学习总结(17)——Spring AOP权限管理相关推荐
- JavaEE——Spring学习笔记03【AOP开发】
JavaEE--Spring学习笔记01[Ioc开发的模式] JavaEE--Spring学习笔记02[Spring和Mybatis的整合] JavaEE--Spring学习笔记03[AOP开发] J ...
- Spring Security 中最流行的权限管理模型!
前面和大家说了 ACL,讲了理论,也给了一个完整的案例,相信小伙伴们对于 ACL 权限控制模型都已经比较了解了. 本文我要和大家聊一聊另外一个非常流行的权限管理模型,那就是 RBAC. 1.RBAC ...
- Spring学习(八)AOP详解
本文借鉴:Spring学习 一.一个例子 在上面的例子中,包租婆的核心业务就是签合同,收房租,那么这就够了,灰色框起来的部分都是重复且边缘的事,交给中介商就好了,这就是 AOP 的一个思想:让关注点代 ...
- Spring学习笔记4,注解方式管理Bean
Spring框架的Bean管理注解方式的快速入门 1. 步骤一:下载Spring框架的开发包 解压后的目录结构如下 * docs – API和开发规范 * libs – jar包和源码 Sp ...
- spring学习笔记(spring概述和IOC)
spring5 1.spring的概述 1.1.spring是什么 Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的. Spring 的 ...
- [spring学习] 1、spring下载与使用
目录 spring介绍 spring核心部分 spring的下载 idea使用spring 总结 spring介绍 Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Jo ...
- Spring 学习之 二----Spring创建对象的三种方式
最近在系统的学习Spring,现在就Spring的一些知识进行总结. 我们知道Spring是一个开放源代码的设计层面的框架,他主要解决的是业务逻辑层与其他各层之间松耦合的问题. Spring 有三个核 ...
- Spring学习笔记 之 Spring<全>
开始学习Spring全家桶 文章目录 1. IoC 定义 为什么叫控制反转? 实现 IoC 容器创建 bean 的两种⽅式 IoC DI 特殊字符的处理 Spring 中的bean创建类型 -- sc ...
- 我的MYSQL学习心得(十三) 权限管理
这一篇<我的MYSQL学习心得(十三)>将会讲解MYSQL的用户管理 在mysql数据库中,有mysql_install_db脚本初始化权限表,存储权限的表有: 1.user表 2.db表 ...
最新文章
- 上海交大发布 MedMNIST 医学图像分析数据集 新基准
- win7查看电脑ip地址的方法
- 程序员搞笑对联_程序员春节对联集锦
- [AHOI 2012]树屋阶梯
- 内存管理之memblock探寻
- H5页面原生gps 定位获取经纬度
- 投影仪融合+拼接处理系统制作原理
- 腾讯电脑管家怎么阻止软件自动安装
- Intellj(IDEA)部署新项目, “warning no artifacts configured” 完美解决方案
- 007 定位明文封包call
- (2)响应式流——响应式Spring的道法术器
- 发现了吗?西部世界III在Broadway上的广告
- 2011年安徽省公务员考试行测真题(3)
- CSS 选择器(超级详细,欢迎补充)
- PC上测试移动端网站和模拟手机浏览器
- oracle预收核销,Oracle EBS AP取消核销
- 制造商将注意力转向轻质量以进一步提高LED市场份额
- Chrome教程(一)NetWork面板分析网络请求
- CCF刷题合集(部分题解)
- Java基础之分支结构--嵌套if选择结构——百米赛跑决赛
热门文章
- python class用法理解_通过钢铁侠变身快速理解Python的装饰器用法
- python构造http请求_Python实现简单的HTTP请求发送详解
- updatebyprimarykeyselective的where条件是全部字段_多组连续数据对比,不满足单因素方差分析的条件怎么办?...
- python3 ascii转utf8_ASCII、Unicode、UTF-8以及Python3编码问题
- 蚁群算法解决tsp问题c语言,蚁群算法解决TSP问题程序.doc
- 怎么设置计算机管理员权限,Windows7管理员权限怎么设置?
- expect java ssh_使用expect实现自动化ssh以及执行命令
- java+jvm+log_java8添加并查看GC日志(ParNew+CMS)
- android中的饱和机制,Android事件分发机制收藏这一篇就够了,通用流行框架大全...
- centos安装mysql8_Docker 快速安装 Mysql