Commit 8c4fd97e authored by 郑杰's avatar 郑杰
Browse files

v1.5 beta版发布,详细查看发行版说明

parent b066bb99
package me.zhengjie.system.domain;
package me.zhengjie.modules.system.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
......@@ -44,8 +45,8 @@ public class Role implements Serializable {
@ManyToMany(mappedBy = "roles")
private Set<Menu> menus;
@Column
@CreationTimestamp
@Column(name = "create_time")
private Timestamp createTime;
@Override
......
package me.zhengjie.system.domain;
package me.zhengjie.modules.system.domain;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp;
import java.io.Serializable;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Set;
......@@ -41,8 +42,10 @@ public class User implements Serializable {
private String password;
@CreationTimestamp
@Column(name = "create_time")
private Timestamp createTime;
@Column(name = "last_password_reset_time")
private Date lastPasswordResetTime;
@ManyToMany
......
package me.zhengjie.system.domain.vo;
package me.zhengjie.modules.system.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
......
package me.zhengjie.system.domain.vo;
package me.zhengjie.modules.system.domain.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.util.List;
/**
......
package me.zhengjie.system.repository;
package me.zhengjie.modules.system.repository;
import me.zhengjie.system.domain.Menu;
import me.zhengjie.system.domain.Role;
import me.zhengjie.modules.system.domain.Menu;
import me.zhengjie.modules.system.domain.Role;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
......
package me.zhengjie.system.repository;
package me.zhengjie.modules.system.repository;
import me.zhengjie.system.domain.Permission;
import me.zhengjie.system.domain.Role;
import me.zhengjie.modules.system.domain.Permission;
import me.zhengjie.modules.system.domain.Role;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
......
package me.zhengjie.system.repository;
package me.zhengjie.modules.system.repository;
import me.zhengjie.system.domain.Role;
import me.zhengjie.modules.system.domain.Role;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
......
package me.zhengjie.system.repository;
package me.zhengjie.modules.system.repository;
import me.zhengjie.system.domain.User;
import me.zhengjie.modules.system.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.Date;
/**
* @author jie
* @date 2018-11-22
......@@ -35,8 +37,8 @@ public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificat
* @param pass
*/
@Modifying
@Query(value = "update user set password = ?2 where id = ?1",nativeQuery = true)
void updatePass(Long id, String pass);
@Query(value = "update user set password = ?2 , last_password_reset_time = ?3 where id = ?1",nativeQuery = true)
void updatePass(Long id, String pass, Date lastPasswordResetTime);
/**
* 修改头像
......
package me.zhengjie.system.rest;
package me.zhengjie.modules.system.rest;
import me.zhengjie.common.aop.log.Log;
import me.zhengjie.common.exception.BadRequestException;
import me.zhengjie.core.utils.JwtTokenUtil;
import me.zhengjie.system.domain.Menu;
import me.zhengjie.system.domain.User;
import me.zhengjie.system.service.MenuService;
import me.zhengjie.system.service.UserService;
import me.zhengjie.system.service.dto.MenuDTO;
import me.zhengjie.system.service.query.MenuQueryService;
import me.zhengjie.aop.log.Log;
import me.zhengjie.modules.system.domain.Menu;
import me.zhengjie.modules.system.domain.User;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.security.utils.JwtTokenUtil;
import me.zhengjie.modules.system.service.MenuService;
import me.zhengjie.modules.system.service.UserService;
import me.zhengjie.modules.system.service.dto.MenuDTO;
import me.zhengjie.modules.system.service.query.MenuQueryService;
import me.zhengjie.utils.SecurityContextHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
......@@ -51,10 +53,12 @@ public class MenuController {
* @return
*/
@GetMapping(value = "/menus/build")
public ResponseEntity buildMenus(HttpServletRequest request){
User user = userService.findByName(jwtTokenUtil.getUserName(request));
public ResponseEntity buildMenus(){
UserDetails userDetails = SecurityContextHolder.getUserDetails();
User user = userService.findByName(userDetails.getUsername());
List<MenuDTO> menuDTOList = menuService.findByRoles(user.getRoles());
return new ResponseEntity(menuService.buildMenus((List<MenuDTO>)menuService.buildTree(menuDTOList).get("content")),HttpStatus.OK);
List<MenuDTO> menuDTOTree = (List<MenuDTO>)menuService.buildTree(menuDTOList).get("content");
return new ResponseEntity(menuService.buildMenus(menuDTOTree),HttpStatus.OK);
}
/**
......@@ -67,7 +71,7 @@ public class MenuController {
return new ResponseEntity(menuService.getMenuTree(menuService.findByPid(0L)),HttpStatus.OK);
}
@Log(description = "查询菜单")
@Log("查询菜单")
@GetMapping(value = "/menus")
@PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_SELECT')")
public ResponseEntity getMenus(@RequestParam(required = false) String name){
......@@ -75,7 +79,7 @@ public class MenuController {
return new ResponseEntity(menuService.buildTree(menuDTOList),HttpStatus.OK);
}
@Log(description = "新增菜单")
@Log("新增菜单")
@PostMapping(value = "/menus")
@PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_CREATE')")
public ResponseEntity create(@Validated @RequestBody Menu resources){
......@@ -85,7 +89,7 @@ public class MenuController {
return new ResponseEntity(menuService.create(resources),HttpStatus.CREATED);
}
@Log(description = "修改菜单")
@Log("修改菜单")
@PutMapping(value = "/menus")
@PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_EDIT')")
public ResponseEntity update(@Validated @RequestBody Menu resources){
......@@ -96,7 +100,7 @@ public class MenuController {
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
@Log(description = "删除菜单")
@Log("删除菜单")
@DeleteMapping(value = "/menus/{id}")
@PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_DELETE')")
public ResponseEntity delete(@PathVariable Long id){
......
package me.zhengjie.system.rest;
package me.zhengjie.modules.system.rest;
import me.zhengjie.common.aop.log.Log;
import me.zhengjie.common.exception.BadRequestException;
import me.zhengjie.system.domain.Permission;
import me.zhengjie.system.service.PermissionService;
import me.zhengjie.system.service.dto.PermissionDTO;
import me.zhengjie.system.service.query.PermissionQueryService;
import me.zhengjie.aop.log.Log;
import me.zhengjie.modules.system.domain.Permission;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.system.service.PermissionService;
import me.zhengjie.modules.system.service.dto.PermissionDTO;
import me.zhengjie.modules.system.service.query.PermissionQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
......@@ -47,7 +47,7 @@ public class PermissionController {
return new ResponseEntity(permissionService.getPermissionTree(permissionService.findByPid(0L)),HttpStatus.OK);
}
@Log(description = "查询权限")
@Log("查询权限")
@GetMapping(value = "/permissions")
@PreAuthorize("hasAnyRole('ADMIN','PERMISSION_ALL','PERMISSION_SELECT')")
public ResponseEntity getPermissions(@RequestParam(required = false) String name){
......@@ -55,7 +55,7 @@ public class PermissionController {
return new ResponseEntity(permissionService.buildTree(permissionDTOS),HttpStatus.OK);
}
@Log(description = "新增权限")
@Log("新增权限")
@PostMapping(value = "/permissions")
@PreAuthorize("hasAnyRole('ADMIN','PERMISSION_ALL','PERMISSION_CREATE')")
public ResponseEntity create(@Validated @RequestBody Permission resources){
......@@ -65,7 +65,7 @@ public class PermissionController {
return new ResponseEntity(permissionService.create(resources),HttpStatus.CREATED);
}
@Log(description = "修改权限")
@Log("修改权限")
@PutMapping(value = "/permissions")
@PreAuthorize("hasAnyRole('ADMIN','PERMISSION_ALL','PERMISSION_EDIT')")
public ResponseEntity update(@Validated @RequestBody Permission resources){
......@@ -76,7 +76,7 @@ public class PermissionController {
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
@Log(description = "删除权限")
@Log("删除权限")
@DeleteMapping(value = "/permissions/{id}")
@PreAuthorize("hasAnyRole('ADMIN','PERMISSION_ALL','PERMISSION_DELETE')")
public ResponseEntity delete(@PathVariable Long id){
......
package me.zhengjie.system.rest;
package me.zhengjie.modules.system.rest;
import me.zhengjie.common.aop.log.Log;
import me.zhengjie.common.exception.BadRequestException;
import me.zhengjie.system.domain.Role;
import me.zhengjie.system.service.RoleService;
import me.zhengjie.system.service.dto.RoleDTO;
import me.zhengjie.system.service.query.RoleQueryService;
import me.zhengjie.aop.log.Log;
import me.zhengjie.modules.system.domain.Role;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.system.service.RoleService;
import me.zhengjie.modules.system.service.dto.RoleDTO;
import me.zhengjie.modules.system.service.query.RoleQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
......@@ -46,14 +46,14 @@ public class RoleController {
return new ResponseEntity(roleService.getRoleTree(),HttpStatus.OK);
}
@Log(description = "查询角色")
@Log("查询角色")
@GetMapping(value = "/roles")
@PreAuthorize("hasAnyRole('ADMIN','ROLES_ALL','ROLES_SELECT')")
public ResponseEntity getRoles(RoleDTO resources, Pageable pageable){
return new ResponseEntity(roleQueryService.queryAll(resources,pageable),HttpStatus.OK);
}
@Log(description = "新增角色")
@Log("新增角色")
@PostMapping(value = "/roles")
@PreAuthorize("hasAnyRole('ADMIN','ROLES_ALL','ROLES_CREATE')")
public ResponseEntity create(@Validated @RequestBody Role resources){
......@@ -63,7 +63,7 @@ public class RoleController {
return new ResponseEntity(roleService.create(resources),HttpStatus.CREATED);
}
@Log(description = "修改角色")
@Log("修改角色")
@PutMapping(value = "/roles")
@PreAuthorize("hasAnyRole('ADMIN','ROLES_ALL','ROLES_EDIT')")
public ResponseEntity update(@Validated @RequestBody Role resources){
......@@ -74,7 +74,7 @@ public class RoleController {
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
@Log(description = "删除角色")
@Log("删除角色")
@DeleteMapping(value = "/roles/{id}")
@PreAuthorize("hasAnyRole('ADMIN','ROLES_ALL','ROLES_DELETE')")
public ResponseEntity delete(@PathVariable Long id){
......
package me.zhengjie.system.rest;
import me.zhengjie.common.aop.log.Log;
import me.zhengjie.common.exception.BadRequestException;
import me.zhengjie.common.utils.ElAdminConstant;
import me.zhengjie.common.utils.RequestHolder;
import me.zhengjie.core.security.JwtUser;
import me.zhengjie.core.utils.EncryptUtils;
import me.zhengjie.core.utils.JwtTokenUtil;
import me.zhengjie.system.domain.User;
import me.zhengjie.system.domain.VerificationCode;
import me.zhengjie.system.service.UserService;
import me.zhengjie.system.service.VerificationCodeService;
import me.zhengjie.system.service.dto.UserDTO;
import me.zhengjie.system.service.query.UserQueryService;
import me.zhengjie.tools.domain.Picture;
import me.zhengjie.tools.service.PictureService;
package me.zhengjie.modules.system.rest;
import me.zhengjie.aop.log.Log;
import me.zhengjie.domain.Picture;
import me.zhengjie.domain.VerificationCode;
import me.zhengjie.modules.system.domain.User;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.security.security.JwtUser;
import me.zhengjie.service.PictureService;
import me.zhengjie.service.VerificationCodeService;
import me.zhengjie.utils.ElAdminConstant;
import me.zhengjie.utils.EncryptUtils;
import me.zhengjie.modules.security.utils.JwtTokenUtil;
import me.zhengjie.modules.system.service.UserService;
import me.zhengjie.modules.system.service.dto.UserDTO;
import me.zhengjie.modules.system.service.query.UserQueryService;
import me.zhengjie.utils.SecurityContextHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
......@@ -64,14 +65,14 @@ public class UserController {
return new ResponseEntity(userService.findById(id), HttpStatus.OK);
}
@Log(description = "查询用户")
@Log("查询用户")
@GetMapping(value = "/users")
@PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_SELECT')")
public ResponseEntity getUsers(UserDTO userDTO, Pageable pageable){
return new ResponseEntity(userQueryService.queryAll(userDTO,pageable),HttpStatus.OK);
}
@Log(description = "新增用户")
@Log("新增用户")
@PostMapping(value = "/users")
@PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_CREATE')")
public ResponseEntity create(@Validated @RequestBody User resources){
......@@ -81,7 +82,7 @@ public class UserController {
return new ResponseEntity(userService.create(resources),HttpStatus.CREATED);
}
@Log(description = "修改用户")
@Log("修改用户")
@PutMapping(value = "/users")
@PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_EDIT')")
public ResponseEntity update(@Validated @RequestBody User resources){
......@@ -92,7 +93,7 @@ public class UserController {
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
@Log(description = "删除用户")
@Log("删除用户")
@DeleteMapping(value = "/users/{id}")
@PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_DELETE')")
public ResponseEntity delete(@PathVariable Long id){
......@@ -107,7 +108,8 @@ public class UserController {
*/
@GetMapping(value = "/users/validPass/{pass}")
public ResponseEntity validPass(@PathVariable String pass){
JwtUser jwtUser = (JwtUser)userDetailsService.loadUserByUsername(jwtTokenUtil.getUserName(RequestHolder.getHttpServletRequest()));
UserDetails userDetails = SecurityContextHolder.getUserDetails();
JwtUser jwtUser = (JwtUser)userDetailsService.loadUserByUsername(userDetails.getUsername());
Map map = new HashMap();
map.put("status",200);
if(!jwtUser.getPassword().equals(EncryptUtils.encryptPassword(pass))){
......@@ -123,7 +125,8 @@ public class UserController {
*/
@GetMapping(value = "/users/updatePass/{pass}")
public ResponseEntity updatePass(@PathVariable String pass){
JwtUser jwtUser = (JwtUser)userDetailsService.loadUserByUsername(jwtTokenUtil.getUserName(RequestHolder.getHttpServletRequest()));
UserDetails userDetails = SecurityContextHolder.getUserDetails();
JwtUser jwtUser = (JwtUser)userDetailsService.loadUserByUsername(userDetails.getUsername());
if(jwtUser.getPassword().equals(EncryptUtils.encryptPassword(pass))){
throw new BadRequestException("新密码不能与旧密码相同");
}
......@@ -138,7 +141,8 @@ public class UserController {
*/
@PostMapping(value = "/users/updateAvatar")
public ResponseEntity updateAvatar(@RequestParam MultipartFile file){
JwtUser jwtUser = (JwtUser)userDetailsService.loadUserByUsername(jwtTokenUtil.getUserName(RequestHolder.getHttpServletRequest()));
UserDetails userDetails = SecurityContextHolder.getUserDetails();
JwtUser jwtUser = (JwtUser)userDetailsService.loadUserByUsername(userDetails.getUsername());
Picture picture = pictureService.upload(file,jwtUser.getUsername());
userService.updateAvatar(jwtUser,picture.getUrl());
return new ResponseEntity(HttpStatus.OK);
......@@ -152,7 +156,8 @@ public class UserController {
*/
@PostMapping(value = "/users/updateEmail/{code}")
public ResponseEntity updateEmail(@PathVariable String code,@RequestBody User user){
JwtUser jwtUser = (JwtUser)userDetailsService.loadUserByUsername(jwtTokenUtil.getUserName(RequestHolder.getHttpServletRequest()));
UserDetails userDetails = SecurityContextHolder.getUserDetails();
JwtUser jwtUser = (JwtUser)userDetailsService.loadUserByUsername(userDetails.getUsername());
if(!jwtUser.getPassword().equals(EncryptUtils.encryptPassword(user.getPassword()))){
throw new BadRequestException("密码错误");
}
......
package me.zhengjie.system.service;
package me.zhengjie.modules.system.service;
import me.zhengjie.system.domain.Menu;
import me.zhengjie.system.domain.Role;
import me.zhengjie.system.service.dto.MenuDTO;
import me.zhengjie.modules.system.domain.Menu;
import me.zhengjie.modules.system.domain.Role;
import me.zhengjie.modules.system.service.dto.MenuDTO;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
......@@ -67,6 +67,7 @@ public interface MenuService {
* @param menuDTOS
* @return
*/
@Cacheable(keyGenerator = "keyGenerator")
Map buildTree(List<MenuDTO> menuDTOS);
/**
......@@ -81,5 +82,6 @@ public interface MenuService {
* @param byRoles
* @return
*/
@Cacheable(keyGenerator = "keyGenerator")
Object buildMenus(List<MenuDTO> byRoles);
}
package me.zhengjie.system.service;
package me.zhengjie.modules.system.service;
import me.zhengjie.system.domain.Permission;
import me.zhengjie.system.service.dto.PermissionDTO;
import me.zhengjie.modules.system.domain.Permission;
import me.zhengjie.modules.system.service.dto.PermissionDTO;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
......@@ -64,5 +64,6 @@ public interface PermissionService {
* @param permissionDTOS
* @return
*/
@Cacheable(keyGenerator = "keyGenerator")
Object buildTree(List<PermissionDTO> permissionDTOS);
}
package me.zhengjie.system.service;
package me.zhengjie.modules.system.service;
import me.zhengjie.system.domain.Role;
import me.zhengjie.system.service.dto.RoleDTO;
import me.zhengjie.system.service.dto.UserDTO;
import me.zhengjie.modules.system.domain.Role;
import me.zhengjie.modules.system.service.dto.RoleDTO;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
......
package me.zhengjie.system.service;
package me.zhengjie.modules.system.service;
import me.zhengjie.core.security.JwtUser;
import me.zhengjie.system.domain.User;
import me.zhengjie.system.service.dto.UserDTO;
import me.zhengjie.modules.system.domain.User;
import me.zhengjie.modules.security.security.JwtUser;
import me.zhengjie.modules.system.service.dto.UserDTO;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
......@@ -49,7 +49,6 @@ public interface UserService {
* @param userName
* @return
*/
@Cacheable(key = "'findByName'+#p0")
User findByName(String userName);
/**
......@@ -57,6 +56,7 @@ public interface UserService {
* @param jwtUser
* @param encryptPassword
*/
@CacheEvict(allEntries = true)
void updatePass(JwtUser jwtUser, String encryptPassword);
/**
......@@ -64,6 +64,7 @@ public interface UserService {
* @param jwtUser
* @param url
*/
@CacheEvict(allEntries = true)
void updateAvatar(JwtUser jwtUser, String url);
/**
......@@ -71,5 +72,6 @@ public interface UserService {
* @param jwtUser
* @param email
*/
@CacheEvict(allEntries = true)
void updateEmail(JwtUser jwtUser, String email);
}
package me.zhengjie.system.service.dto;
package me.zhengjie.modules.system.service.dto;
import lombok.Data;
import java.sql.Timestamp;
import java.util.List;
import java.util.Set;
......
package me.zhengjie.system.service.dto;
package me.zhengjie.modules.system.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.List;
......
package me.zhengjie.system.service.dto;
package me.zhengjie.modules.system.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Set;
......
package me.zhengjie.system.service.dto;
package me.zhengjie.modules.system.service.dto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment