快速构建一个权限项目(六)

今天我们讲解的是Http请求前后监听工具

首先得创建一个类用来做处理:HttpInterceptor.class:

package cn.oyc.common;

import cn.oyc.util.JsonMapper;import lombok.extern.slf4j.Slf4j;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.util.Map;

@Slf4jpublic class HttpInterceptor extends HandlerInterceptorAdapter {    private final Logger logger = LoggerFactory.getLogger(HttpInterceptor.class);

    private static final String START_TIME = "requestStartTime";    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        String url = request.getRequestURL().toString();        Map parameterMap = request.getParameterMap();        logger.info("request start. utl:{},params:{}",url, JsonMapper.obj2String(parameterMap));        long start = System.currentTimeMillis();        request.setAttribute(START_TIME,start);        return true;    }

    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {//        String url = request.getRequestURL().toString();//        long start = (Long) request.getAttribute(START_TIME);//        long end = System.currentTimeMillis();//        logger.info("request finished. utl:{},cost:{}",url, end - start);    }

    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {        String url = request.getRequestURL().toString();        long start = (Long) request.getAttribute(START_TIME);        long end = System.currentTimeMillis();        logger.info("request completed. utl:{},cost:{}",url, end - start);    }}

做完这些别忘记配置一下spring-servlet.xml,配置一段bean:

 <mvc:interceptors>
        <bean class="cn.oyc.common.HttpInterceptor"/>
    </mvc:interceptors>

接下来我们这个类就编写完了,大家要记住,这个类可以拦截我们系统的url,可以在url请求之前可以做些事情,然后在请求处理完之后依旧可以做一些事情,这里我们基本的工具就配置好了,接下来就是编写我们

的部门接口的一个实现了,跟着下面来:

首先在param包下编写一个部门类DeptParam:

package cn.oyc.param;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;

import javax.validation.constraints.NotNull;

@Getter
@Setter
@ToString
public class DeptParam {

    private Integer id;
    @NotBlank(message = "部门名称不可以为空")
    @Length(max = 15,min = 2,message = "部门名称需要在2-15个字之间")
    private String name;

    private Integer parentId;
    @NotNull(message = "展示顺序不可以为空")
    private Integer seq;
    @Length(max = 150,message = "备注的长度需要在150个字以内")
    private String remark;
}

在编写一个controller,SysDeptController:

package cn.oyc.controller;

import cn.oyc.common.JsonData;
import cn.oyc.param.DeptParam;
import cn.oyc.service.SysDeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;

@Controller
@RequestMapping("/sys/dept")
@Slf4j
public class SysDeptController {
    @Resource
    private SysDeptService sysDeptService;
    @RequestMapping("/save.json")
    public JsonData saveDept(DeptParam param){
        sysDeptService.save(param);
        return JsonData.success("");
    }
}

在这之前我们还得创建他的Service:

package cn.oyc.service;

import cn.oyc.dao.SysDeptMapper;
import cn.oyc.entity.SysDept;
import cn.oyc.exception.ParamException;
import cn.oyc.param.DeptParam;
import cn.oyc.util.BeanValidator;
import cn.oyc.util.LevelUtil;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;

@Service
public class SysDeptService {

    @Resource
    private SysDeptMapper sysDeptMapper;

    public void save(DeptParam param) {
        BeanValidator.check(param);
        if (checkExist(param.getParentId(),param.getName(),param.getId())){
            throw new ParamException("同一层级下存在相同名称的部门");
        }
        SysDept dept = SysDept.builder().name(param.getName()).parentId(param.getParentId())
                .seq(param.getSeq()).remark(param.getRemark()).build();
        dept.setLevel(LevelUtil.calculateLevel(getLevel(param.getParentId()),param.getParentId()));
        dept.setOperator("system");//TODO:
        dept.setOperateIp("127.0.0.1"); //TODO
        dept.setOperateTime(new Date());
        sysDeptMapper.insertSelective(dept);
    }

    private boolean checkExist(Integer parentId,String deptName,Integer deptId){
        // TODD:
        return true;
    }
    private String getLevel(Integer deptId){
        SysDept dept = sysDeptMapper.selectByPrimaryKey(deptId);
        if (dept == null){
            return null;
        }
        return dept.getLevel();
    }
}

在创建一个层级状态的类:

package cn.oyc.util;

import org.apache.commons.lang3.StringUtils;

public class LevelUtil {

    public final static String SEPARATOR = ".";

    public final static String ROOT = "0";

    //0
    //0.1
    //0.1.2
    //0.1.3
    //0.4
    public static String calculateLevel(String parentLevel,int parentId){
        if (StringUtils.isBlank(parentLevel)){
            return ROOT;
        }else{
            return StringUtils.join(parentLevel,SEPARATOR,parentId);
        }
    }
}

在我们的SysDept实体中添加注解

@Builder@NoArgsConstructor@AllArgsConstructor@ToString

原文地址:https://www.cnblogs.com/Myoyc/p/12239392.html

时间: 2024-11-08 14:38:27

快速构建一个权限项目(六)的相关文章

快速构建一个权限项目(三)

如何构建一个权限项目这里接着我们上次说的来编写代码,我们这个点主要讲的是接口请求全局异常处理, 接下来跟我一起看我编写的代码如何实现的,首先我们要定义一个全局异常的处理类,在common包下建一个类SpringExceptionResolver: package cn.oyc.common; import cn.oyc.exception.ParamException; import cn.oyc.exception.PermissionException; import lombok.exte

快速构建一个权限项目(二)

好各位小伙伴们我们接着上一篇文章来叙述完善我们的项目,希望大家能够喜欢: 在上一篇文章中我们已经把前面基本的配置都配置好了,下面就来教大家一个我们这个项目的核心类去搭建mybatis吧, 首先我们需要一个工具generate,这个工具我们在网站上也能搜索到,但是我们这里接下来也会直接教大家使用. 首先我们要导入这个工具,这里呢不能上传文件所以我将以代码的形式展示给你们: 首先我们的工具是这样一个节点展示的,其中最重要的是这generator.xml文件,文件内容如下: <?xml version

快速构建一个权限项目(四)

接着上一章的,接下来我们所写的校验工具-BeanValidator开发,好了跟着我们下面的代码来实现: 首先我们需要先在pom.xml引入依赖: <!-- validator --> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version

快速构建一个权限项目(五)

今天我们首先讲的是Json转化工具-JsonMapper开发: 在这里我们首先在pom文件引入jackson的两个依赖,分别是: <!-- jackson --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.13</version> <

react快速构建一个应用项目

安装 dva-cli 你应该会更希望关注逻辑本身,而不是手动敲入一行行代码来构建初始的项目结构,以及配置开发环境. 那么,首先需要安装的是 dva-cli .dva-cli 是 dva 的命令行工具,包含 init.new.generate 等功能,目前最重要的功能是可以快速生成项目以及你所需要的代码片段. $ npm install -g dva-cli 安装完成后,可以通过 dva -v 查看版本,以及 dva -h 查看帮助信息. 创建新应用 安装完 dva-cli 后,我们用他来创建一个

ember.js快速构建一个应用项目(1)

步骤: 安装Ember. 创建一个新应用程序. 定义路由. 编写一个UI组件. 构建您的应用程序以部署到生产环境. 安装Ember 您可以使用npm(Node.js包管理器,你需要安装node.js)使用单个命令来安装Ember.在终端中输入以下内容: ember new ember-quickstart 创建一个新应用程序 一旦你通过npm安装了Ember CLI,你将可以ember在你的终端中访问一个新的命令.您可以使用该ember new命令来创建一个新的应用程序: ember new e

【springboot】之快速构建一个web项目

基于maven,首先看pom文件 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.0.RELEASE</version> </parent> <dependencies> <!-- springboot启动

快速构建一个Spring Boot+MyBatis的项目IDEA(附源码下载)

如何快速构建一个Spring Boot的项目 工具 idea JDK版本 1.8 Spring Boot 版本 1.5.9 环境搭建实现:最基础前端可以访问到数据库内的内容 开始 IDEA 内部新建一个项目,项目类型选择Spring Initializr,Project SDK选择适合你当前环境的版本,这里我选择的是1.8(Spring Boot 2.0以上的版本,JDK选择请选择1.8即以上版本),构建服务选择默认就好,点击Next 填写Group和Artifact(此处我使用的是默认,请根据

快速构建一个 Springboot

快速构建一个 Springboot 官网:http://projects.spring.io/spring-boot/ Spring Boot可以轻松创建可以"运行"的独立的,生产级的基于Spring的应用程序.我们对Spring平台和第三方图书馆有一个看法,所以你可以从最开始的时候开始吧.大多数Spring Boot应用程序需要很少的Spring配置. 特征 创建独立的Spring应用程序 直接嵌入Tomcat,Jetty或Undertow(不需要部署WAR文件) 提供有意思的&qu