2019独角兽企业重金招聘Python工程师标准>>>

前言:

假如我们需要做一个功能——授权访问,即对所有的方法的访问之前需要判断用户是否登陆,只有登陆的用户才可以访问方法。对于这个情景,如果选择在每一个方法内加上用户登录判断,那么就会造成大量的代码冗余,由此引出AOP的使用。

使用AOP(面向切面编程),我们可以把判断用户是否登陆作为一个切面,插入到每一个方法执行的各个位置。

这里,我们以记录请求日志为例子,记录下SpringBoot中AOP的使用:

1. 加入aop依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>1.5.6.RELEASE</version></dependency>

2. 建立处理文件

(chrome中右键选“在新标签中打开图片”即可查看大图)

源码如下:

package com.example.demo.aspect;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;@Aspect
@Component
public class HttpAspect {private static final Logger logger= LoggerFactory.getLogger(HttpAspect.class);@Pointcut("execution(public * com.example.demo.controller.StudentController.*(..))")public void log(){}@Before("log()")public void doBefore(JoinPoint joinPoint){//urlServletRequestAttributes attributes= (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();HttpServletRequest request=attributes.getRequest();logger.info("url={}",request.getRequestURL());//methodlogger.info("method={}",request.getMethod());//iplogger.info("ip={}",request.getRemoteAddr());//类方法logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+ "." +joinPoint.getSignature().getName());//参数logger.info("args={}", joinPoint.getArgs());}@After("log()")public void doAfter(){logger.info("2222222222222");}@AfterReturning(returning = "object",pointcut = "log()")public void doAfterReturning(Object object){logger.info("response={}",object);}}

转载于:https://my.oschina.net/u/3381212/blog/1539845

SpringBoot系列(6)——使用AOP处理请求相关推荐

  1. 拦截器获取请求参数post_「SpringBoot WEB 系列」RestTemplate 之自定义请求头

    [WEB 系列]RestTemplate 之自定义请求头 上一篇介绍了 RestTemplate 的基本使用姿势,在文末提出了一些扩展的高级使用姿势,本篇将主要集中在如何携带自定义的请求头,如设置 U ...

  2. Springboot系列之Shiro、JWT、Redis 进行认证鉴权

    Springboot系列之Shiro.JWT.Redis 进行认证鉴权 Shiro架构 Apache Shiro是一个轻量级的安全框架 Shiro可以非常容易的开发出足够好的应用,其不仅可以用在Jav ...

  3. SpringBoot系列-- SpringBoot中使用lombok简化开发

    目录 1. 项目环境 2.添加依赖和安装插件 3. 实体类常用注解总结 3.1 @Setter.@Getter 3.1.1 注解在属性上 3.1.2 注解在类上 3.1.3 注解对静态属性和final ...

  4. SpringBoot系列: RestTemplate 快速入门

    ==================================== 相关的文章 ==================================== SpringBoot系列: 与Sprin ...

  5. 【SpringBoot】SpingBoot整合AOP

    说起spring,我们知道其最核心的两个功能就是AOP(面向切面)和IOC(控制反转),这边文章来总结一下SpringBoot如何整合使用AOP. 一.示例应用场景:对所有的web请求做切面来记录日志 ...

  6. 【笑小枫的SpringBoot系列】【九】SpringBoot用户登录功能实现

    关于本文 其实用户登录拦截的这块不想这么早写,加个登录后面好多东西就要考虑登录状态了,我其实想把这个系列写成非必要关系,解耦性比较强的系列.但是,写完redis,总是感觉登录是对它最简单的实践,那就加 ...

  7. SpringBoot 整合 Spring Security 实现安全认证【SpringBoot系列9】

    SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见. 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCl ...

  8. springboot项目中接口防止恶意请求多次,重复请求的解决办法,适合小白

    在项目中,接口的暴露在外面,很多人就会恶意多次快速请求,那我们开发的接口和服务器在这样的频率下的话,服务器和数据库很快会奔溃的,那我们该怎么防止接口防刷呢?由于博主小白,很多都不懂,都是从网上一点一点 ...

  9. SpringBoot 系列教程(八十五):Spring Boot使用MD5加盐验签Api接口之前后端分离架构设计

    加密算法参考: 浅谈常见的七种加密算法及实现 加密算法参考: 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用 目的: 通过对API接口请求报文签名,后端进行验签处理, ...

  10. Java工程师之SpringBoot系列教程前言目录

    前言 与时俱进是每一个程序员都应该有的意识,当一个Java程序员在当代步遍布的时候,你就行该想到我能多学点什么.可观的是后端的框架是稳定的,它们能够维持更久的时间在应用中,而不用担心技术的更新换代.但 ...

最新文章

  1. Matlab与线性代数 -- 稀疏矩阵的创建
  2. __getattr__ 与动态属性
  3. 潘建伟团队又创世界纪录!实现500公里量级现场光纤量子通信
  4. Python取出两个文件中相同的电话号码及地址(文件类型为:txt文本)
  5. HDU OJ Matrix Swapping II
  6. Nodejs 安装 on centos7
  7. 【Docker】 命令速查
  8. 鸿蒙汽车电动尾门工厂,汽车智能电动尾门为什么能成为汽车电子行业“新宠”?...
  9. PlatformIO for CLion 创建工程时出现 gathering information问题解决方法
  10. maven添加阿里云仓库
  11. ZigBee 快速入门(协议栈,协调器,路由器,终端设备,加入网络,安全,路由功能,频段)
  12. catia二次开发:人机交互select,start command
  13. 七大行星排列图片_太阳系八大行星大小及排列顺序
  14. mysql查看表被哪个进程锁住_查询mysql 哪些表正在被锁状态
  15. BootstarpTable在IE11的兼容问题
  16. 单像素成像图像智能处理算法
  17. python字符串居中对齐_Python center()字符串居中对齐方法详解
  18. matlab输入错误怎么修改,matlab 一个错误 怎么修改
  19. GitHub上最火的Android开源项目
  20. linux下如何清空一个文件?

热门文章

  1. 程序逻辑的处理方式尽量不要写在SQL文中
  2. Excel的一些工作中不算是常见,但是遇到时常常不知所错的,问题,与解决方案。
  3. 关于数据准备时,自动棌番的主键,这一字段数据的注意(IT总结之五)
  4. n3k配置vpc是否还需要配置hsrp_VPC配置案例
  5. 分布式定时任务调度系统技术解决方案(xxl-job、Elastic-job、Saturn)
  6. ubuntu服务器上提示 To run a command as administrator (user “root“), use “sudo <command>“. See “ 解决方案
  7. 解决nuxt.js新建项目报错的问题
  8. Android 使用JSON格式与服务器交互 中文乱码问题解决
  9. 问题解决:pip无法使用,经升级后可以使用
  10. [转]解决mySQL占用内存超大问题