@Log(description = "test")
@PutMapping(value = "/test")
@PreAuthorize("hasAnyRole('admin','menu:edit')")
public ResponseEntity update(@Validated @RequestBody Menu resources){
// 略
}
接口表示用户拥有 admin、menu:edit 权限中的任意一个就能能访问update方法,如果方法不加@preAuthorize注解,意味着所有用户都需要带上有效的 token 后能访问 update 方法。由于admin 拥有所有权限 所以在进行拦截时 有必要进行抽象 所以需要对其进行抽取 检查是否有admin 是的话就放行 不是的话就找到它的权限
1、创建一个查询类 QueryCriteria
2、在控制器中使用
3. Service 中查询
@Override
// @Cacheable
public Object queryAll(UserQueryCriteria criteria, Pageable pageable) {
Page<User> page = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(userMapper::toDto));
}
@CacheConfig:主要用于配置该类中会用到的一些共用的缓存配置
@Cacheable:主要方法的返回值将被加入缓存。在查询时,会先从缓存中获取,若不存在才再发起对数据库的访问。
@CachePut:主要用于数据新增和修改操作
@CacheEvict:配置于函数上,通常用在删除方法上,用来从缓存中移除相应数据。
封装了 BadRequestException,用于处理通用的异常
(1) 实体不存在: EntityNotFoundException
(2) 实体已存在:EntityExistException
全局异常拦截: GlobalExceptionHandler
用法:
/ 通用异常
throw new BadRequestException(“发生了异常”);
// 通用异常,使用自定义状态码
throw new BadRequestException(HttpStatus.OK, “发送了异常”);
// 实体存在异常
throw new EntityExistException(User.class, “email”, “[email protected]”);
// 实体不存在异常
throw new EntityNotFoundException(User.class, “userName”, “test”);
本系统使用 AOP 方式记录用户操作日志,只需要在 controller 的方法上使用 @Log("") 注解,就可以将用户操作记录到数据库,
@Log("新增用户")
@PostMapping(value = "/users")
public ResponseEntity create(@Validated @RequestBody User resources){
checkLevel(resources);
return new ResponseEntity(userService.create(resources),HttpStatus.CREATED);
}
使用步骤:
@Slf4j
@Component
public class TestTask {
public void run(){ log.info("执行成功"); }
public void run1(String str){ log.info("执行成功,参数为: {}" + str); }
}
public Map<String,Object> queryAll(SOrderQueryCriteria criteria, Pageable pageable){// 这里用 Predicate 封装了查询条件 传入lambda 表达式 根据查询条件进行封装 进而由 JpaSpecificationExecutor 执行分页查询结果 得到 结果集 totle: totalElements:[{},{}]
// root 是一个 操作查询条件的 用它来拼装具体的查询实体
Page<SOrder> page = sOrderRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
// 得到的page对象 用工具类转换成map 然后传到页面 sOrderMapper::toDto 意思是调用 sOrderMapper 的 toDto方法 将实体类的 SOrder 转化为DTO
// 双冒号是jdk8的一个重要方法 意为 调用 sOrderMapper 里面的 toDto 方法 把 page 转换为: SOrderDto
Page<SOrderDto> map = page.map(sOrderMapper::toDto);
// 将DTO 转换为 map
Map<String, Object> pageResult = PageUtil.toPage(map);
return pageResult;
}
eladmin-common -> me.zhengjie.base
异步线程池
eladmin-system -> me.zhengjie.config.AsyncTaskExecutePool
线程池工具类
eladmin-system -> me.zhengjie.config.ThreadPoolExecutorUtil
使用方式:
private final static ThreadPoolExecutor executor = ThreadPoolExecutorUtil.getPoll();
common 模块的util
ElAdminConstant:系统常用常量定义
EncryptUtils:加密工具,包括对称加密解密,md5加盐加密
FileUtil:文件工具类
PageUtil:分页工具类
RequestHolder:随时获取 HttpServletRequest
SecurityUtils:获取当前用户
SpringContextHolder:随时获取bean
StringUtils:字符串工具类
ThrowableUtil:异常工具,获取堆栈信息
ValidationUtil:验证工具
#目录如下
设置show-overflow-tooltip为true使row中的文字有省略提示
<el-table-column :width="flexColumnWidth(column)" :show-overflow-tooltip="true" v-for="column in tableData.columns" :key="column" :label="customLabel(column)" :prop="column">
import moment from ‘moment’
js校验:
邮箱:
{ type: ‘email’, message: ‘请输入正确的邮箱地址’, trigger: ‘blur’ }
时间处理: 数据库 是 datetime 实体类这么写
/** 添加时间 */
@Column(name = “import_time”)
@CreationTimestamp // 这个注解是必须的 否则就会报错
private Timestamp importTime;
隐藏列 v-if=‘show’
栅栏架构:
<el-row type="flex" class="row-bg">
<el-col :span="6">
</el-col>
<el-col :span="6">
</el-col>
</el-row>
<el-divider></el-divider>
#eladmin behind
server {
listen 80;
server_name 192.168.186.129;
location / {
proxy_pass http://127.0.0.1:8000; #这里的端口记得改成项目对应的哦
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
#eladmin front
server
{
listen 8013;
server_name 192.168.186.129;
index index.html index.htm;
root /usr/local/webserver/nginx/dist; #dist上传的路径
error_page 404 /index.html; #这个配置,预防页面刷新后跳转到404页面
}