Java SSM 项目实战 day09 SSMAOP日志

//1.获取类上的这个注解@RequestMapping(“/orders”)的值

RequestMapping classAnnotation = (RequestMapping)clazz.getAnnotation(RequestMapping.class);

if(classAnnotation != null){

String[] classValue = classAnnotation.value();//获取到了/orders

//2、获取方法上的@RequestMapping(xxx)

RequestMapping methodAnnotation = method.getAnnotation(RequestMapping.class);

if(methodAnnotation != null){

String [] methodValue = methodAnnotation.value();

url = classValue[0] + methodValue[0];

}

}

}

//获取访问的IP地址

String ip = requset.getRemoteAddr();

//如何获取当前操作的用户

SecurityContext context = SecurityContextHolder.getContext();//从上下文当中获取当前登录的用户

User user = (User)context.getAuthentication().getPrincipal();

String username = user.getUsername();

//将日志相关信息分装到SysLog对象当中

SysLog sysLog = new SysLog();

sysLog.setExecutionTime(time);//执行时长

sysLog.setIp(ip);

sysLog.setMethod("[类名] “+clazz.getName()+”[方法名] " + method.getName());

sysLog.setUrl(url);

sysLog.setUsername(username);

sysLog.setVisitTime(visitTime);

//调用Service完成数据库的插入操作(即日志的记录操作)

}

}

2、创建对应的Service接口和对应的实现类

(1)ISysLogService接口

在这里插入图片描述

package com.itzheng.ssm.service;

import com.itzheng.ssm.domain.SysLog;

public interface ISysLogService {

public void save(SysLog sysLog) throws Exception;

}

(2)SysLogServiceImpl

在这里插入图片描述

在这里插入图片描述

package com.itzheng.ssm.service.impl;

import com.itzheng.ssm.domain.SysLog;

import com.itzheng.ssm.service.ISysLogService;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

@Service

@Transactional

public class SysLogServiceImpl implements ISysLogService {

@Override

public void save(SysLog sysLog) throws Exception {

}

}

3、创建对应的DAO

在这里插入图片描述

在这里插入图片描述

package com.itzheng.ssm.dao;

import com.itzheng.ssm.domain.SysLog;

import org.apache.ibatis.annotations.Insert;

public interface ISysLogDao {

@Insert(“”)

public void save(SysLog sysLog) throws Exception ;

}

4、完善上述所有的业务以及dao

(1)SysLogServiceImpl

在这里插入图片描述

package com.itzheng.ssm.service.impl;

import com.itzheng.ssm.dao.ISysLogDao;

import com.itzheng.ssm.domain.SysLog;

import com.itzheng.ssm.service.ISysLogService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

@Service

@Transactional

public class SysLogServiceImpl implements ISysLogService {

@Autowired

private ISysLogDao sysLogDao;

@Override

public void save(SysLog sysLog) throws Exception {

sysLogDao.save(sysLog);

}

}

(2)LogAop

在这里插入图片描述

@Autowired

private ISysLogService sysLogService;

在这里插入图片描述

//调用Service完成数据库的插入操作(即日志的记录操作)

sysLogService.save(sysLog);

(3)ISysLogDao

在这里插入图片描述

package com.itzheng.ssm.dao;

import com.itzheng.ssm.domain.SysLog;

import org.apache.ibatis.annotations.Insert;

public interface ISysLogDao {

@Insert(“insert into syslog(visitTime,username,ip,url,executionTime,method) values(#{visitTime},#{username},#{ip},#{url},#{executionTime},#{method})”)

public void save(SysLog sysLog) throws Exception ;

}

(4)完善LogAop类

在这里插入图片描述

package com.itzheng.ssm.controller;

import com.itzheng.ssm.domain.SysLog;

import com.itzheng.ssm.service.ISysLogService;

import org.aspectj.lang.JoinPoint;

import org.aspectj.lang.annotation.After;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.http.HttpRequest;

import org.springframework.http.server.ServletServerHttpRequest;

import org.springframework.security.core.context.SecurityContext;

import org.springframework.security.core.context.SecurityContextHolder;

import org.springframework.security.core.userdetails.User;

import org.springframework.stereotype.Component;

import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

import java.lang.annotation.Annotation;

import java.lang.reflect.Method;

import java.util.Date;

@Component

@Aspect

public class LogAop {

@Autowired

private HttpServletRequest request;

@Autowired

private ISysLogService sysLogService;

private Date visitTime; //开始时间

private Class clazz; //访问的类

private Method method;//访问的方法

//前置通知 主要是获取开始时间,执行的类是哪一个,执行的是哪一个方法

@Before(“execution(* com.itzheng.ssm.controller..(…))”)

public void doBefore(JoinPoint jp) throws NoSuchMethodException {

visitTime = new Date();//当前时间就是开始访问的时间

clazz = jp.getTarget().getClass(); //具体要访问的类

String methodName = jp.getSignature().getName(); //获取访问的方法的名称

Object[] args = jp.getArgs();//获取访问的方法的参数

//获取具体执行的方法的Method对象

if (args == null || args.length == 0) {

method = clazz.getMethod(methodName); //只能获取无参数的方法

} else {

Class[] classArgs = new Class[args.length];

for (int i = 0; i < args.length; i++) {

classArgs[i] = args[i].getClass();

}

clazz.getMethod(methodName, classArgs);

}

}

//后置通知

@After(“execution(* com.itzheng.ssm.controller..(…))”)

public void doAfter(JoinPoint jp) throws Exception {

long time = new Date().getTime() - visitTime.getTime(); //获取访问的时长

String url = “”;

//获取url

if (clazz != null && method != null && clazz != LogAop.class) {

//1.获取类上的@RequestMapping(“/orders”)

RequestMapping classAnnotation = (RequestMapping) clazz.getAnnotation(RequestMapping.class);

if (classAnnotation != null) {

String[] classValue = classAnnotation.value();

//2.获取方法上的@RequestMapping(xxx)

RequestMapping methodAnnotation = method.getAnnotation(RequestMapping.class);

if (methodAnnotation != null) {

String[] methodValue = methodAnnotation.value();

url = classValue[0] + methodValue[0];

//获取访问的ip

String ip = request.getRemoteAddr();

//String ip = “192.168.153.2012”;

//获取当前操作的用户

SecurityContext context = SecurityContextHolder.getContext();//从上下文中获了当前登录的用户

User user = (User) context.getAuthentication().getPrincipal();

String username = user.getUsername();

//将日志相关信息封装到SysLog对象

SysLog sysLog = new SysLog();

sysLog.setExecutionTime(time); //执行时长

sysLog.setIp(ip);

sysLog.setMethod("[类名] " + clazz.getName() + "[方法名] " + method.getName());

sysLog.setUrl(url);

sysLog.setUsername(username);

sysLog.setVisitTime(visitTime);

//调用Service完成操作

sysLogService.save(sysLog);

}

}

}

}

}

(5)修改OrdersController当中findAll方法参数

在这里插入图片描述

@RequestMapping(“/findAll.do”)

@Secured(“ROLE_ADMIN”)

public ModelAndView findAll(@RequestParam(name = “page”, required = true, defaultValue = “1”) Integer page,

@RequestParam(name = “size”, required = true, defaultValue = “4”) Integer size) throws Exception {

(6)运行测试

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、基于AOP日志的查询


在这里插入图片描述

(1)创建syslog-list.jsp

在这里插入图片描述

<%@ page language=“java” contentType=“text/html; charset=UTF-8”

pageEncoding=“UTF-8”%>

<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>

数据 - AdminLTE2定制版

<meta

content=“width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no”

name=“viewport”>

href=“${pageContext.request.contextPath}/plugins/bootstrap/css/bootstrap.min.css”>

href=“${pageContext.request.contextPath}/plugins/font-awesome/css/font-awesome.min.css”>

href=“${pageContext.request.contextPath}/plugins/ionicons/css/ionicons.min.css”>

href=“${pageContext.request.contextPath}/plugins/iCheck/square/blue.css”>

href=“${pageContext.request.contextPath}/plugins/morris/morris.css”>

href=“${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-1.2.2.css”>

href=“${pageContext.request.contextPath}/plugins/datepicker/datepicker3.css”>

href=“${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.css”>

href=“${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css”>

href=“${pageContext.request.contextPath}/plugins/datatables/dataTables.bootstrap.css”>

href=“${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.css”>

href=“${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.theme.default.css”>

href=“${pageContext.request.contextPath}/plugins/select2/select2.css”>

href=“${pageContext.request.contextPath}/plugins/colorpicker/bootstrap-colorpicker.min.css”>

href=“${pageContext.request.contextPath}/plugins/bootstrap-markdown/css/bootstrap-markdown.min.css”>

href=“${pageContext.request.contextPath}/plugins/adminLTE/css/AdminLTE.css”>

href=“${pageContext.request.contextPath}/plugins/adminLTE/css/skins/_all-skins.min.css”>

href=“${pageContext.request.contextPath}/css/style.css”>

href=“${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.css”>

href=“${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.skinNice.css”>

href=“${pageContext.request.contextPath}/plugins/bootstrap-slider/slider.css”>

href=“${pageContext.request.contextPath}/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.css”>

<jsp:include page=“header.jsp”></jsp:include>

<jsp:include page=“aside.jsp”></jsp:include>

日志管理 全部日志

  • class=“fa fa-dashboard”> 首页

  • href=“${pageContext.request.contextPath}/sysLog/findAll.do”>日志管理

  • 全部日志
  • 列表

    <button type=“button” class=“btn btn-default” title=“刷新”

    οnclick=“window.location.reload();”>

    刷新

    <input type=“text” class=“form-control input-sm”

    placeholder=“搜索”> <span

    class=“glyphicon glyphicon-search form-control-feedback”>

    class=“table table-bordered table-striped table-hover dataTable”>

    type=“checkbox” class=“icheckbox_square-blue”>

    ID 访问时间 访问用户 访问IP 资源URL 执行时间 访问方法

    <c:forEach items=“${sysLogs}” var=“syslog”>

    ${syslog.id} ${syslog.visitTimeStr } ${syslog.username } ${syslog.ip } ${syslog.url} ${syslog.executionTime}毫秒 ${syslog.method}

    </c:forEach>

    <button type=“button” class=“btn btn-default” title=“刷新”

    οnclick=“window.location.reload();”>

    刷新

    <input type=“text” class=“form-control input-sm”

    placeholder=“搜索”> <span

    class=“glyphicon glyphicon-search form-control-feedback”>

    总共2 页,共14 条数据。 每页

    10 15 20 50 80

    • 首页
    • 上一页
    • 1
    • 2
    • 3
    • 4
    • 5
    • 下一页
    • 尾页
    • Version 1.0.8

      Copyright © 2014-2017 <a

      href=“http://www.itcast.cn”>研究院研发部.

      All rights reserved.

      (2)创建SysLogController

      在这里插入图片描述

      在这里插入图片描述

      package com.itzheng.ssm.controller;

      import com.itzheng.ssm.domain.SysLog;

      import com.itzheng.ssm.service.ISysLogService;

      import org.springframework.beans.factory.annotation.Autowired;

      import org.springframework.stereotype.Controller;

      import org.springframework.web.bind.annotation.RequestMapping;

      import org.springframework.web.servlet.ModelAndView;

      import java.util.List;

      @Controller

      @RequestMapping(“/sysLog”)

      public class SysLogController {

      @Autowired

      private ISysLogService sysLogService;

      @RequestMapping(“/findAll.do”)

      public ModelAndView findAll() throws Exception{

      ModelAndView mv = new ModelAndView();

      List sysLogList = sysLogService.findAll();

      return mv;

      }

      }

      (3)ISysLogService以及SysLogServiceImpl当中

      在这里插入图片描述

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值