概述
AOP
AOP面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种功能。
在实现管理系统的各种功能时,增删改查一般需要登录者的权限,以防用户直接输入链接地址,在未登录的情况下进行管理操作,保证系统的安全性。
一般可以在每个功能方法下编写验证功能,从session中获取用户,如果用户不存在,则返回主页面,这样代码重复量较大,也可以通过调用验证接口做,也有重复量。而AOP通过声明切面类,事先选取哪些方法的前后需要做一些操作(如用户验证),这些选出来的方法就是切点,而编写的验证操作为Advice。切面和Advice结合在一起,形成了切面。
- Aspect(切面): Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。
- Joint point(连接点):表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。
- Pointcut(切点):表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
- Advice(增强):Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。
Advice通常包括以下几个类型:
- before advice, 在 join point 前被执行的 advice. 虽然 before advice 是在 join point 前被执行, 但是它并不能够阻止 join point 的执行, 除非发生了异常(即我们在 before advice 代码中, 不能人为地决定是否继续执行 join point 中的代码)
- after return advice, 在一个 join point 正常返回后执行的 advice
- after throwing advice, 当一个 join point 抛出异常后执行的 advice
- after(final) advice, 无论一个 join point 是正常退出还是发生了异常, 都会被执行的 advice.
- around advice, 在 join point 前和 joint point 退出后都执行的 advice. 这个是最常用的 advice.
- introduction,introduction可以为原有的对象增加新的属性和方法。
用户的登录验证,AOP实现如下:
package com.example.controller;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Aspect//声明该类为切面类
@Component//将类放入容器中
public class LoginAop {
@Pointcut("within(com.example.controller..*)&&!within(com.example.controller.LoginController)")
public void verify(){}
@Around("verify()")
public Object doverify(ProceedingJoinPoint joinPoint) throws Throwable{
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
HttpSession session=request.getSession();
Object user=session.getAttribute("user");
if (user==null)
return "index";
return joinPoint.proceed();
}
}
最后
以上就是勤恳八宝粥为你收集整理的AOP实现登录验证AOP的全部内容,希望文章能够帮你解决AOP实现登录验证AOP所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复