04.AdminLTE的基本介绍

05.SSM整合案例的基本介绍

06.产品操作

07.订单操作

08.权限控制

09.用户和角色操作

10.权限关联

11.AOP日志

11.AOP日志


1、数据库与表结构

1.2.sql语句

CREATE TABLE sysLog(
id VARCHAR2(32) default SYS_GUID() PRIMARY KEY,
visitTime timestamp,
username VARCHAR2(50),
ip VARCHAR2(30),
url VARCHAR2(50),
executionTime int,
method VARCHAR2(200)
)

1.3.实体类

public class SysLog {
private String id;
private Date visitTime;
private String visitTimeStr;
private String username;
private String ip;
private String url;
private Long executionTime;
private String method; //==============================================//
public String getVisitTimeStr() {
if(visitTime !=null){
//调用自己写的工具类转换
visitTimeStr = DateUtils.date2String(visitTime,"yyyy-MM-dd HH:mm:ss");
}
return visitTimeStr;
} //=============================================//

2.基于AOP日志处理

6.AOP日志中信息获取

7.AOP日志查询操作流程

为了获取访问的IP

在WEB-INF目录下的

web.xml 中配置一个spring监听器Listener

    <!-- 配置监听器,监听request域对象的创建和销毁的 -->
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

ip地址获取
ip地址的获取我们可以通过request.getRemoteAddr()方法获取到。
在Spring中可以通过RequestContextListener来获取request或session对象。

2.3.SysLogController

@RequestMapping("/sysLog")
@Controller
public class SysLogController { @Autowired
private ISysLogService sysLogService; @RequestMapping("/findAll.do")
public ModelAndView findAll() throws Exception{
ModelAndView mv = new ModelAndView();
List<SysLog> sysLogsList = sysLogService.findAll();
mv.addObject("sysLogs",sysLogsList);
mv.setViewName("syslog-list2");
return mv;
}
}

2.4.Service层

@Service
@Transactional
public class SysLogServiceImpl implements ISysLogService { @Autowired
private ISysLogDao sysLogDao; @Override
public void save(SysLog log) throws Exception {
sysLogDao.save(log);
} @Override
public List<SysLog> findAll() throws Exception {
return sysLogDao.findAll();
}
}

2.5.Dao层  
  基于注解+接口的方法使用 mybatis集成spring

public interface ISysLogDao {

    @Insert({"insert into SYSLOG(visitTime,username,ip,url,executionTime,method)" ,
"values( #{visitTime},#{username},#{ip},#{url},#{executionTime},#{method})" })
public void save(SysLog log) throws Exception; //保存日志的接口方法 @Select("select * from syslog")
@Results({
@Result(id=true,column="id",property="id"),
@Result(column="visitTime",property="visitTime"),
@Result(column="ip",property="ip"),
@Result(column="url",property="url"),
@Result(column="executionTime",property="executionTime"),
@Result(column="method",property="method"),
@Result(column="username",property="username")
})
public List<SysLog> findAll() throws Exception; //查询日志的接口方法 }

Controller层的AOP切面类

前置通知 的方法内容

@Component  //spring框架的注解
@Aspect
public class LogAop { @Autowired
private HttpServletRequest request; //访问的IP @Autowired
private ISysLogService sysLogService; private Date startTime; //访问开始时间
private Class executionClass; //访问的类
private Method executionMethod; //访问的方法 //前置通知
//主要是获取开始时间,执行的类是哪一个,执行的是哪一个方法
@Before("execution(* cn.bjut.ssm.controller.*.*(..))")
public void doBefore(JoinPoint jp) throws NoSuchMethodException, SecurityException{
//开始访问的时间
startTime = new Date();
//具体要访问的类
executionClass = jp.getTarget().getClass(); String methodName =jp.getSignature().getName(); //获取访问的方法的名称
Object[] args = jp.getArgs(); //获取访问的方法的参数 //获取具体执行的方法的Method对象
if(args==null || args.length == 0){ //无参数
executionMethod = executionClass.getMethod(methodName); //只能获取无参数方法
}else{
// 有参数,就将args中所有元素遍历,获取对应的Class,装入到一个Class[]
Class[] classArgs = new Class[args.length];
for(int i=0; i<args.length; i++) {
classArgs[i] = args[i].getClass();
}
executionMethod = executionClass.getMethod(methodName, classArgs);// 获取有参数方法
} } //============================================================================================//

后置通知 的方法内容

    //============================================================================================//

    //后置通知
//主要获取日志中其它信息,时长、ip、url
@After("execution(* cn.bjut.ssm.controller.*.*(..))")
public void doAfter(JoinPoint jp) throws Exception { // 获取类上的@RequestMapping对象
if (executionClass != SysLogController.class) {
RequestMapping classAnnotation = (RequestMapping) executionClass.getAnnotation(RequestMapping.class);
if (classAnnotation != null) {
// 获取方法上的@RequestMapping对象
RequestMapping methodAnnotation = executionMethod.getAnnotation(RequestMapping.class); if (methodAnnotation != null) {
String url = ""; // 它的值应该是类上的@RequestMapping的value+方法上的@RequestMapping的value
url = classAnnotation.value()[0] + methodAnnotation.value()[0]; SysLog sysLog = new SysLog();
// 获取访问时长
Long executionTime = new Date().getTime() - startTime.getTime();
// 将sysLog对象属性封装
sysLog.setExecutionTime(executionTime);
sysLog.setUrl(url);
// 获取ip
String ip = request.getRemoteAddr(); //已经在web.xml配置spring的request监听器
sysLog.setIp(ip); // 可以通过securityContext获取,也可以从request.getSession中获取
SecurityContext context = SecurityContextHolder.getContext(); //request.getSession().getAttribute("SPRING_SECURITY_CONTEXT")
//String username = ((User) (context.getAuthentication().getPrincipal())).getUsername();
User user = (User) context.getAuthentication().getPrincipal();
String username = user.getUsername(); sysLog.setUsername(username);
sysLog.setMethod("[类名]" + executionClass.getName() + "[方法名]" + executionMethod.getName());
sysLog.setVisitTime(startTime); // 调用Service,调用dao将sysLog insert数据库
sysLogService.save(sysLog); }
}
}
}

=====================

end

08 SSM整合案例(企业权限管理系统):11.AOP日志的更多相关文章

  1. 08 SSM整合案例(企业权限管理系统):05.SSM整合案例的基本介绍

    04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户和角色操作 10.权限关联 11.AOP日志 05.SSM整合案例的基本介绍 ...

  2. 08 SSM整合案例(企业权限管理系统):09.用户和角色操作

    04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户和角色操作 10.权限关联 11.AOP日志 09.用户和角色操作 1. 用 ...

  3. SSM整合案例:图书管理系统

    目录 SSM整合案例:图书管理系统 1.搭建数据库环境 2.基本环境搭建 2.1.新建一个Maven项目,起名为:ssmbuild,添加web的支持 2.2.导入pom的相关依赖 2.3.Maven静 ...

  4. 08 SSM整合案例(企业权限管理系统):07.订单操作

    04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.用户操作 09.权限控制 10.权限关联与控制 11.AOP日志 07.订单操作 SSM订单操作 ...

  5. 08 SSM整合案例(企业权限管理系统):06.产品操作

    04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.用户操作 09.权限控制 10.权限关联与控制 11.AOP日志 06.产品操作 SSM 环境搭 ...

  6. 08 SSM整合案例(企业权限管理系统):08.权限控制

    04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户操作 10.权限关联与控制 11.AOP日志 08.权限控制 SSM权限操作 ...

  7. 08 SSM整合案例(企业权限管理系统):10.权限关联与控制

    04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户操作 10.权限关联与控制 11.AOP日志 10.权限关联与控制 1.用户 ...

  8. 基于RBAC模型的通用企业权限管理系统

    1. 为什么我们需要基于RBAC模型的通用企业权限管理系统 管理信息系统是一个复杂的人机交互系统,其中每个具体环节都可能受到安全威胁.构建强健的权限管理系统,保证管理信息系统的安全性是十分重要的.权限 ...

  9. SSM项目实战 之 权限管理系统

    目录 SSM权限管理系统 项目搭建 1.创建Maven-webapp工程 2.SSM框架集成 3.添加代码生成器 主页搭建 EasyUI主页 员工列表 1.在tree当中指定跳转的地址--暂时用tre ...

随机推荐

  1. Iptables与LVS——从入门到放弃

    防火墙什么是防火墙?防火墙其实就是一个隔离的工具,工作于主机或者网络的边缘,对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配监测.防火墙可以简单地划分为两大类:主机防火墙 网络防火墙     ...

  2. Oracle数据库自带了decode()函数

    Oracle数据库自带了decode()函数,函数的使用方法如下:   SELECT   emp.ename,   emp.job,   emp.sal,   decode(job, 'manager ...

  3. django的404,500错误自定义页面的配置

    django404,500错误自定义页面: 1.设置settings文件 DEBUG = False ALLOWED_HOSTS = ['127.0.0.1', 'localhost']或者ALLOW ...

  4. Windows篇:链接linux->"Xmanager"

    Windows篇:链接linux->"Xmanager" Xmanager是什么? Xmanager是一款小巧.便捷的浏览远端X窗口系统的工具.在工作中经常使用Xmanage ...

  5. C语言表结构(1)

    1.顺序表初始化实战: #include<stdio.h> #include<stdlib.h> #define OK 1 #define OVERFLOW 0 #define ...

  6. python中单下划线的变量

    1._xxx 不能用于’from module import *’ 以单下划线开头的表示的是protected类型的变量.即保护类型只能允许其本身与子类进行访问.2.__xxx 双下划线的表示的是私有 ...

  7. git客户端出现libpng warning: iCCP: known incorrect sRGB profile

    在关闭gitk窗口的时候,会出现一系列的  libpng warning: iCCP: known incorrect sRGB profilelibpng warning: iCCP: known  ...

  8. Matplotlib 图形绘制

    章节 Matplotlib 安装 Matplotlib 入门 Matplotlib 基本概念 Matplotlib 图形绘制 Matplotlib 多个图形 Matplotlib 其他类型图形 Mat ...

  9. CentOS7 环境下 在Hadoop集群安装Hive

    1.下载Hive的tar.gz包:http://mirror.bit.edu.cn/apache/hive/ 2.放入CentOS 7 系统中并解压:tar -zxvf apache-hive-2.3 ...

  10. ffmpeg 学习: 004-参考文档进行的开发

    背景 在学习ffmpeg时,由于文档老旧以及ffmpeg新旧版本对于一些api的改动,导致学习受阻. 本来可以直接下载老的库,使用老的源码进行学习,但本人觉得,一味地守旧并不是一种好的方法. ffmp ...