Java SSM 项目实战 day02 功能介绍,SSM整合,数据库和IDEA的maven工程搭建,产品信息查询和添加
Java SSM 项目实战 day03 功能介绍,订单的操作,订单的增删改查
Java SSM 项目实战 day04 功能介绍,订单的操作,订单的增删改查,实现登录功能
Java SSM 项目实战 day05 用户操作
Java SSM 项目实战 day06 角色操作,资源权限操作
Java SSM 项目实战 day07 SpringSecurity源码分析
Java SSM 项目实战 day07用户角色关联操作,添加角色,以及添加权限
Java SSM 项目实战 day08 方法级别的权限操作 服务器端的权限控制(JSR-250注解)(支持表达式的注解)(@Secured)以及页面端的权限控制
Java SSM 项目实战 day09 SSMAOP日志

一、数据库与表结构

1、日志表信息描述sysLog

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)
)




3、创建对应的实体类


package com.itzheng.ssm.domain;
import java.util.Date;
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 SysLog() {}public SysLog(String id, Date visitTime, String visitTimeStr, String username, String ip, String url, Long executionTime, String method) {this.id = id;this.visitTime = visitTime;this.visitTimeStr = visitTimeStr;this.username = username;this.ip = ip;this.url = url;this.executionTime = executionTime;this.method = method;}public String getId() {return id;}public void setId(String id) {this.id = id;}public Date getVisitTime() {return visitTime;}public void setVisitTime(Date visitTime) {this.visitTime = visitTime;}public String getVisitTimeStr() {return visitTimeStr;}public void setVisitTimeStr(String visitTimeStr) {this.visitTimeStr = visitTimeStr;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public Long getExecutionTime() {return executionTime;}public void setExecutionTime(Long executionTime) {this.executionTime = executionTime;}public String getMethod() {return method;}public void setMethod(String method) {this.method = method;}@Overridepublic String toString() {return "SysLog{" +"id='" + id + '\'' +", visitTime=" + visitTime +", visitTimeStr='" + visitTimeStr + '\'' +", username='" + username + '\'' +", ip='" + ip + '\'' +", url='" + url + '\'' +", executionTime=" + executionTime +", method='" + method + '\'' +'}';}
}

二、基于AOP日志处理(记录日志信息)

1、在控制层创建LogAop类


修改web.xml,添加一下内容

<listener><listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

LogAop类

package com.itzheng.ssm.controller;import com.itzheng.ssm.domain.SysLog;
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.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 {@Autowiredprivate HttpServletRequest requset;private Date visitTime;//开始的时间private Class clazz;//访问的类private Method method;//访问的方法//前置通知   主要是获取我们的开始的时间,执行类的哪一个,执行的是哪一个方法@Before("execution(* com.itzheng.ssm.controller.*.*(..))")//拦截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();//获取每一个方法参数,放到classArgs数组当中}method = clazz.getMethod(methodName,classArgs);//只能获取无参数的方法}}//后置通知@After("execution(* com.itzheng.ssm.controller.*.*(..))")//拦截controller类当中的所有的方法public void doAfter(JoinPoint jp){long time = new Date().getTime()-visitTime.getTime();//获取了访问的时长String url = "";//获取urlif( clazz != null && method != null && clazz != LogAop.class){//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 {@Overridepublic 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 {@Autowiredprivate ISysLogDao sysLogDao;@Overridepublic void save(SysLog sysLog) throws Exception {sysLogDao.save(sysLog);}
}

(2)LogAop

@Autowiredprivate 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 {@Autowiredprivate HttpServletRequest request;@Autowiredprivate 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 = "";//获取urlif (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];//获取访问的ipString 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"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<!-- 页面meta -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"><title>数据 - AdminLTE2定制版</title>
<meta name="description" content="AdminLTE2定制版">
<meta name="keywords" content="AdminLTE2定制版"><!-- Tell the browser to be responsive to screen width -->
<metacontent="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"name="viewport"><link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/ionicons/css/ionicons.min.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/iCheck/square/blue.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/morris/morris.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-1.2.2.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/datepicker/datepicker3.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/datatables/dataTables.bootstrap.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.theme.default.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/select2/select2.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/colorpicker/bootstrap-colorpicker.min.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/bootstrap-markdown/css/bootstrap-markdown.min.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/adminLTE/css/AdminLTE.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/adminLTE/css/skins/_all-skins.min.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/css/style.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.skinNice.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/bootstrap-slider/slider.css">
<link rel="stylesheet"href="${pageContext.request.contextPath}/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.css">
</head><body class="hold-transition skin-blue sidebar-mini"><div class="wrapper"><!-- 页面头部 --><jsp:include page="header.jsp"></jsp:include><!-- 页面头部 /--><!-- 导航侧栏 --><jsp:include page="aside.jsp"></jsp:include><!-- 导航侧栏 /--><!-- 内容区域 --><div class="content-wrapper"><!-- 内容头部 --><section class="content-header"><h1>日志管理 <small>全部日志</small></h1><ol class="breadcrumb"><li><a href="${pageContext.request.contextPath}/index.jsp"><iclass="fa fa-dashboard"></i> 首页</a></li><li><ahref="${pageContext.request.contextPath}/sysLog/findAll.do">日志管理</a></li><li class="active">全部日志</li></ol></section><!-- 内容头部 /--><!-- 正文区域 --><section class="content"> <!-- .box-body --><div class="box box-primary"><div class="box-header with-border"><h3 class="box-title">列表</h3></div><div class="box-body"><!-- 数据表格 --><div class="table-box"><!--工具栏--><div class="pull-left"><div class="form-group form-inline"><div class="btn-group"><button type="button" class="btn btn-default" title="刷新"onclick="window.location.reload();"><i class="fa fa-refresh"></i> 刷新</button></div></div></div><div class="box-tools pull-right"><div class="has-feedback"><input type="text" class="form-control input-sm"placeholder="搜索"> <spanclass="glyphicon glyphicon-search form-control-feedback"></span></div></div><!--工具栏/--><!--数据列表--><table id="dataList"class="table table-bordered table-striped table-hover dataTable"><thead><tr><th class="" style="padding-right: 0px"><input id="selall"type="checkbox" class="icheckbox_square-blue"></th><th class="sorting_asc">ID</th><th class="sorting">访问时间</th><th class="sorting">访问用户</th><th class="sorting">访问IP</th><th class="sorting">资源URL</th><th class="sorting">执行时间</th><th class="sorting">访问方法</th></tr></thead><tbody><c:forEach items="${sysLogs}" var="syslog"><tr><td><input name="ids" type="checkbox"></td><td>${syslog.id}</td><td>${syslog.visitTimeStr }</td><td>${syslog.username }</td><td>${syslog.ip }</td><td>${syslog.url}</td><td>${syslog.executionTime}毫秒</td><td>${syslog.method}</td>                                     </tr></c:forEach></tbody></table><!--数据列表/--><!--工具栏--><div class="pull-left"><div class="form-group form-inline"><div class="btn-group"><button type="button" class="btn btn-default" title="刷新"onclick="window.location.reload();"><i class="fa fa-refresh"></i> 刷新</button></div></div></div><div class="box-tools pull-right"><div class="has-feedback"><input type="text" class="form-control input-sm"placeholder="搜索"> <spanclass="glyphicon glyphicon-search form-control-feedback"></span></div></div><!--工具栏/--></div><!-- 数据表格 /--></div><!-- /.box-body --><!-- .box-footer--><div class="box-footer"><div class="pull-left"><div class="form-group form-inline">总共2 页,共14 条数据。 每页 <select class="form-control"><option>10</option><option>15</option><option>20</option><option>50</option><option>80</option></select> 条</div></div><div class="box-tools pull-right"><ul class="pagination"><li><a href="#" aria-label="Previous">首页</a></li><li><a href="#">上一页</a></li><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li><li><a href="#">4</a></li><li><a href="#">5</a></li><li><a href="#">下一页</a></li><li><a href="#" aria-label="Next">尾页</a></li></ul></div></div><!-- /.box-footer--></div></section><!-- 正文区域 /--></div><!-- 内容区域 /--><!-- 底部导航 --><footer class="main-footer"><div class="pull-right hidden-xs"><b>Version</b> 1.0.8</div><strong>Copyright &copy; 2014-2017 <ahref="http://www.itcast.cn">研究院研发部</a>.</strong> All rights reserved. </footer><!-- 底部导航 /--></div><scriptsrc="${pageContext.request.contextPath}/plugins/jQuery/jquery-2.2.3.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/jQueryUI/jquery-ui.min.js"></script><script>$.widget.bridge('uibutton', $.ui.button);</script><scriptsrc="${pageContext.request.contextPath}/plugins/bootstrap/js/bootstrap.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/raphael/raphael-min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/morris/morris.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/sparkline/jquery.sparkline.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-1.2.2.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-world-mill-en.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/knob/jquery.knob.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/daterangepicker/moment.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.zh-CN.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/datepicker/bootstrap-datepicker.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/datepicker/locales/bootstrap-datepicker.zh-CN.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/slimScroll/jquery.slimscroll.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/fastclick/fastclick.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/iCheck/icheck.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/adminLTE/js/app.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/select2/select2.full.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/colorpicker/bootstrap-colorpicker.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap-wysihtml5.zh-CN.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/bootstrap-markdown/js/bootstrap-markdown.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/bootstrap-markdown/locale/bootstrap-markdown.zh.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/bootstrap-markdown/js/markdown.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/bootstrap-markdown/js/to-markdown.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/ckeditor/ckeditor.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/input-mask/jquery.inputmask.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/input-mask/jquery.inputmask.date.extensions.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/input-mask/jquery.inputmask.extensions.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/datatables/jquery.dataTables.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/datatables/dataTables.bootstrap.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/chartjs/Chart.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/flot/jquery.flot.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/flot/jquery.flot.resize.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/flot/jquery.flot.pie.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/flot/jquery.flot.categories.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.min.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/bootstrap-slider/bootstrap-slider.js"></script><scriptsrc="${pageContext.request.contextPath}/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.min.js"></script><script>$(document).ready(function() {// 选择框$(".select2").select2();// WYSIHTML5编辑器$(".textarea").wysihtml5({locale : 'zh-CN'});});// 设置激活菜单function setSidebarActive(tagUri) {var liObj = $("#" + tagUri);if (liObj.length > 0) {liObj.parent().parent().addClass("active");liObj.addClass("active");}}$(document).ready(function() {// 激活导航位置setSidebarActive("order-manage");// 列表按钮 $("#dataList td input[type='checkbox']").iCheck({checkboxClass : 'icheckbox_square-blue',increaseArea : '20%'});// 全选操作 $("#selall").click(function() {var clicks = $(this).is(':checked');if (!clicks) {$("#dataList td input[type='checkbox']").iCheck("uncheck");} else {$("#dataList td input[type='checkbox']").iCheck("check");}$(this).data("clicks", !clicks);});});</script>
</body></html>

(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 {@Autowiredprivate ISysLogService sysLogService;@RequestMapping("/findAll.do")public ModelAndView findAll() throws Exception{ModelAndView mv = new ModelAndView();List<SysLog> sysLogList = sysLogService.findAll();return mv;}
}

(3)ISysLogService以及SysLogServiceImpl当中

List<SysLog> findAll()throws Exception;

  @Overridepublic List<SysLog> findAll() throws Exception {return sysLogDao.findAll();}

(4)ISysLogDao当中

  @Select("select * from sysLog")List<SysLog> findAll() throws Exception ;

(5)完善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 {@Autowiredprivate ISysLogService sysLogService;@RequestMapping("/findAll.do")public ModelAndView findAll() throws Exception{ModelAndView mv = new ModelAndView();List<SysLog> sysLogList = sysLogService.findAll();mv.addObject("sysLogs",sysLogList);mv.setViewName("syslog-list");return mv;}
}

(6)运行测试项目



Java SSM 项目实战 day02 功能介绍,SSM整合,数据库和IDEA的maven工程搭建,产品信息查询和添加
Java SSM 项目实战 day03 功能介绍,订单的操作,订单的增删改查
Java SSM 项目实战 day04 功能介绍,订单的操作,订单的增删改查,实现登录功能
Java SSM 项目实战 day05 用户操作
Java SSM 项目实战 day06 角色操作,资源权限操作
Java SSM 项目实战 day07 SpringSecurity源码分析
Java SSM 项目实战 day07用户角色关联操作,添加角色,以及添加权限
Java SSM 项目实战 day08 方法级别的权限操作 服务器端的权限控制(JSR-250注解)(支持表达式的注解)(@Secured)以及页面端的权限控制
Java SSM 项目实战 day09 SSMAOP日志

Java SSM 项目实战 day09 SSMAOP日志相关推荐

  1. ssm 项目记录用户操作日志和异常日志

    ssm 项目记录用户操作日志和异常日志 参考文章: (1)ssm 项目记录用户操作日志和异常日志 (2)https://www.cnblogs.com/mei-m/p/10231792.html (3 ...

  2. Java Web项目实战案例一

    Java Web项目实战案例一 一.主要开发工具如下: 1.物理机:windows 10 2.apache-maven-3.5.3 3.jdk1.8.0_161 4.Intellij 二.构建过程 项 ...

  3. JAVA框架项目实战:系统公告设计及实现

    项目实战:系统公告设计及实现 本期涉及内容:JDBC.点击即可跳转复习JDBC 1.需求及业务设计 项目(公告系统) 1.需求(为行政人员发布公告,通知提供遍历) 2.原型设计(系统做完以后是什么样子 ...

  4. SSM项目实战:酒店管理系统

    使用的技术栈:Spring+SpringMVC+mybatis+Mysql+layui+Maven Maven 项目结构.项目配置项为: 服务器:apache-tomcat-9.0.0.M26 (必须 ...

  5. java ssm项目经验描述_第一个SSM完整项目开发心得

    博主因为打算要考研,所以为了给自己留一手后路.学习了SSM框架.这学期就做了一个完整的SSM项目.(如果考研失败就去外包做一波CRUD boy) 所以边考研边利用业余时间做了一学期,接着期末一周的We ...

  6. vue+elementui学生宿舍管理系统(报修,来访登记,水电费)java ssm项目介绍

    宿舍,是大学生在高校校园里一个重要的学习.生活.交往的空间环境,大学生大约有2/3的时间是在宿舍环境里渡过的.作为计算机应用的一部分,使用计算机对宿舍信息进行管理,具有着手工管理所无法比拟的优点.例如 ...

  7. java调查问卷系统-投票系统-SSM项目实战

    课程基于Layui+Spring+SpringMVC+MyBatis开发小而完整的调查问卷系统实战 源码地址 链接:https://pan.baidu.com/s/1PCr0FUYevO9VsKIwd ...

  8. SSM项目实战【从 0 到 1】:个人博客

    文章目录 前言 一.项目简介 二.项目技术栈 三.准备工作 1.Spring Boot 项目创建 2.mybatis 配置 3.数据库创建 四.基本框架搭建 1.实体层(model) 2.控制器层(c ...

  9. java ssm项目_JAVA项目:逝去的SSM

    SSM(Spring+SpringMVC+MyBatis) SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作 ...

  10. Hadoop项目实战---黑马论坛日志分析

    1.项目描述 通过对黑马技术论坛的apache common日志进行分析, 计算论坛关键指标,供运营者决策. 2.数据情况 每行记录有5部分组成: 1.访问ip 2.访问时间 3.访问资源[跟着两个访 ...

最新文章

  1. CentOS 6.2 yum安装配置lnmp服务器(Nginx+PHP+MySQL)
  2. 工业控制软件测试评价体系,工业控制信息安全产品测试评价的体系.doc
  3. c++ 在哪里找文档来看_FPX双C十四连败引热议!Doinb:我再也不跟LWX双排了
  4. VS SPEC FLOW接口自动化之环境搭建及一个简单项目(一)
  5. 吴恩达机器学习笔记:(五)区别于微积分的正规方程求解最优解
  6. python httplib2的安装
  7. mysql查询注意_mysql中sql查询使用注意
  8. foxmail占cpu 100%解决办法
  9. 002-Go通过ioutil 读写文件
  10. 性能测试知多少---性能需求分析
  11. 转 java中static{}语句块详解
  12. nsis出错_NSIS错误(NSIS Error)的原因和解决方法总结
  13. sqlite3 表创建后设置主外键 联合主键 外键设置
  14. 《计算机工程》从投稿到录用之一手经验
  15. 涉及数字的英语表示——几点钟、年月日、世纪、年代、年龄
  16. 史上最全软件测试工程师常见的面试题总结(九)【多测师】
  17. Cocos Creator 调试入门
  18. 组合数学——牡牛和牝牛
  19. Ubuntu18.04设置主题后,切换用户或锁定就自动休眠(待解决)
  20. 错误 LNK2019 无法解析的外部符号 “__declspec(dllimport) public: int __thiscall osg::Referenced::ref(void)const “

热门文章

  1. 【JVM】尚硅谷宋红康JVM系列1:内存与垃圾回收篇
  2. java snakeyaml_java – 使用SnakeYAML的嵌套构造
  3. Android 高通配置SUPL
  4. cmd关闭kill进程
  5. 【银河麒麟V10】【桌面】安装虚拟pdf打印机
  6. java供应链项目详解_基于jsp的企业供应链管理系统-JavaEE实现企业供应链管理系统 - java项目源码...
  7. 数学物理计算机的思考
  8. 《符号学:原理与推演》(一)符号的构成
  9. 数据分析的坑,都在统计学里埋过
  10. Python爬虫项目:爬虫爬取正则分析糗百数据