每个项目都会有权限管理系统

无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录、权限管理这些必不可少的业务逻辑。有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就算这样,但你肯定也会有后台管理及登录功能。

每个项目中都会有这些几乎一样的业务逻辑,我们能不能把他们做成通用的系统呢?

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权限管理相关推荐

  1. JavaEE——Spring学习笔记03【AOP开发】

    JavaEE--Spring学习笔记01[Ioc开发的模式] JavaEE--Spring学习笔记02[Spring和Mybatis的整合] JavaEE--Spring学习笔记03[AOP开发] J ...

  2. Spring Security 中最流行的权限管理模型!

    前面和大家说了 ACL,讲了理论,也给了一个完整的案例,相信小伙伴们对于 ACL 权限控制模型都已经比较了解了. 本文我要和大家聊一聊另外一个非常流行的权限管理模型,那就是 RBAC. 1.RBAC ...

  3. Spring学习(八)AOP详解

    本文借鉴:Spring学习 一.一个例子 在上面的例子中,包租婆的核心业务就是签合同,收房租,那么这就够了,灰色框起来的部分都是重复且边缘的事,交给中介商就好了,这就是 AOP 的一个思想:让关注点代 ...

  4. Spring学习笔记4,注解方式管理Bean

    Spring框架的Bean管理注解方式的快速入门 1. 步骤一:下载Spring框架的开发包 解压后的目录结构如下 * docs – API和开发规范 * libs – jar包和源码      Sp ...

  5. spring学习笔记(spring概述和IOC)

    spring5 1.spring的概述 1.1.spring是什么 Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的. Spring 的 ...

  6. [spring学习] 1、spring下载与使用

    目录 spring介绍 spring核心部分 spring的下载 idea使用spring 总结 spring介绍 Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Jo ...

  7. Spring 学习之 二----Spring创建对象的三种方式

    最近在系统的学习Spring,现在就Spring的一些知识进行总结. 我们知道Spring是一个开放源代码的设计层面的框架,他主要解决的是业务逻辑层与其他各层之间松耦合的问题. Spring 有三个核 ...

  8. Spring学习笔记 之 Spring<全>

    开始学习Spring全家桶 文章目录 1. IoC 定义 为什么叫控制反转? 实现 IoC 容器创建 bean 的两种⽅式 IoC DI 特殊字符的处理 Spring 中的bean创建类型 -- sc ...

  9. 我的MYSQL学习心得(十三) 权限管理

    这一篇<我的MYSQL学习心得(十三)>将会讲解MYSQL的用户管理 在mysql数据库中,有mysql_install_db脚本初始化权限表,存储权限的表有: 1.user表 2.db表 ...

最新文章

  1. 上海交大发布 MedMNIST 医学图像分析数据集 新基准
  2. win7查看电脑ip地址的方法
  3. 程序员搞笑对联_程序员春节对联集锦
  4. [AHOI 2012]树屋阶梯
  5. 内存管理之memblock探寻
  6. H5页面原生gps 定位获取经纬度
  7. 投影仪融合+拼接处理系统制作原理
  8. 腾讯电脑管家怎么阻止软件自动安装
  9. Intellj(IDEA)部署新项目, “warning no artifacts configured” 完美解决方案
  10. 007 定位明文封包call
  11. (2)响应式流——响应式Spring的道法术器
  12. 发现了吗?西部世界III在Broadway上的广告
  13. 2011年安徽省公务员考试行测真题(3)
  14. CSS 选择器(超级详细,欢迎补充)
  15. PC上测试移动端网站和模拟手机浏览器
  16. oracle预收核销,Oracle EBS AP取消核销
  17. 制造商将注意力转向轻质量以进一步提高LED市场份额
  18. Chrome教程(一)NetWork面板分析网络请求
  19. CCF刷题合集(部分题解)
  20. Java基础之分支结构--嵌套if选择结构——百米赛跑决赛

热门文章

  1. python class用法理解_通过钢铁侠变身快速理解Python的装饰器用法
  2. python构造http请求_Python实现简单的HTTP请求发送详解
  3. updatebyprimarykeyselective的where条件是全部字段_多组连续数据对比,不满足单因素方差分析的条件怎么办?...
  4. python3 ascii转utf8_ASCII、Unicode、UTF-8以及Python3编码问题
  5. 蚁群算法解决tsp问题c语言,蚁群算法解决TSP问题程序.doc
  6. 怎么设置计算机管理员权限,Windows7管理员权限怎么设置?
  7. expect java ssh_使用expect实现自动化ssh以及执行命令
  8. java+jvm+log_java8添加并查看GC日志(ParNew+CMS)
  9. android中的饱和机制,Android事件分发机制收藏这一篇就够了,通用流行框架大全...
  10. centos安装mysql8_Docker 快速安装 Mysql