Commit 1af4eb89 authored by ZhengJie's avatar ZhengJie
Browse files

[代码完善](v2.5): v2.5 beta 缓存优化、加入RsaUtils工具类解决Rsa解密过慢,多选删除优化,修复菜单缓存问题,修复代码生成表查询分页问题

去除大量基于注解的缓存,去除列表查询的缓存,去除不合理的@CacheEvict(allEntries = true),缓存细腻化。

部分接口多选删除优化。

修复由于升级 hutool 工具版本导致代码生成分页错误的Bug

有问题请提 Issues

2.5 Beta 详情:https://www.ydyno.com/archives/1225.html
parent 2d969b43
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @author Zheng Jie
* @website https://docs.auauz.net
* @description
* @date 2020-05-18
**/
@Data
@Component
public class RsaProperties {
public static String privateKey;
@Value("${rsa.private_key}")
public void setPrivateKey(String privateKey) {
RsaProperties.privateKey = privateKey;
}
}
\ No newline at end of file
package me.zhengjie.utils;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
/**
* @author https://www.cnblogs.com/nihaorz/p/10690643.html
* @description
* @date 2020-05-18
**/
public class RsaUtils {
private static final String SRC = "123456";
public static void main(String[] args) throws Exception {
System.out.println("\n");
RSAKeyPair keyPair = generateKeyPair();
System.out.println("公钥:" + keyPair.getPublicKey());
System.out.println("私钥:" + keyPair.getPrivateKey());
System.out.println("\n");
test1(keyPair);
System.out.println("\n");
test2(keyPair);
System.out.println("\n");
}
/**
* 公钥加密私钥解密
*/
private static void test1(RSAKeyPair keyPair) throws Exception {
System.out.println("***************** 公钥加密私钥解密开始 *****************");
String text1 = encryptByPublicKey(keyPair.getPublicKey(), RsaUtils.SRC);
String text2 = decryptByPrivateKey(keyPair.getPrivateKey(), text1);
System.out.println("加密前:" + RsaUtils.SRC);
System.out.println("加密后:" + text1);
System.out.println("解密后:" + text2);
if (RsaUtils.SRC.equals(text2)) {
System.out.println("解密字符串和原始字符串一致,解密成功");
} else {
System.out.println("解密字符串和原始字符串不一致,解密失败");
}
System.out.println("***************** 公钥加密私钥解密结束 *****************");
}
/**
* 私钥加密公钥解密
* @throws Exception /
*/
private static void test2(RSAKeyPair keyPair) throws Exception {
System.out.println("***************** 私钥加密公钥解密开始 *****************");
String text1 = encryptByPrivateKey(keyPair.getPrivateKey(), RsaUtils.SRC);
String text2 = decryptByPublicKey(keyPair.getPublicKey(), text1);
System.out.println("加密前:" + RsaUtils.SRC);
System.out.println("加密后:" + text1);
System.out.println("解密后:" + text2);
if (RsaUtils.SRC.equals(text2)) {
System.out.println("解密字符串和原始字符串一致,解密成功");
} else {
System.out.println("解密字符串和原始字符串不一致,解密失败");
}
System.out.println("***************** 私钥加密公钥解密结束 *****************");
}
/**
* 公钥解密
*
* @param publicKeyText 公钥
* @param text 待解密的信息
* @return /
* @throws Exception /
*/
public static String decryptByPublicKey(String publicKeyText, String text) throws Exception {
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyText));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
byte[] result = cipher.doFinal(Base64.decodeBase64(text));
return new String(result);
}
/**
* 私钥加密
*
* @param privateKeyText 私钥
* @param text 待加密的信息
* @return /
* @throws Exception /
*/
public static String encryptByPrivateKey(String privateKeyText, String text) throws Exception {
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyText));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(text.getBytes());
return Base64.encodeBase64String(result);
}
/**
* 私钥解密
*
* @param privateKeyText 私钥
* @param text 待解密的文本
* @return /
* @throws Exception /
*/
public static String decryptByPrivateKey(String privateKeyText, String text) throws Exception {
PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyText));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(Base64.decodeBase64(text));
return new String(result);
}
/**
* 公钥加密
*
* @param publicKeyText 公钥
* @param text 待加密的文本
* @return /
*/
public static String encryptByPublicKey(String publicKeyText, String text) throws Exception {
X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyText));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] result = cipher.doFinal(text.getBytes());
return Base64.encodeBase64String(result);
}
/**
* 构建RSA密钥对
*
* @return /
* @throws NoSuchAlgorithmException /
*/
public static RSAKeyPair generateKeyPair() throws NoSuchAlgorithmException {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
String publicKeyString = Base64.encodeBase64String(rsaPublicKey.getEncoded());
String privateKeyString = Base64.encodeBase64String(rsaPrivateKey.getEncoded());
return new RSAKeyPair(publicKeyString, privateKeyString);
}
/**
* RSA密钥对对象
*/
public static class RSAKeyPair {
private final String publicKey;
private final String privateKey;
public RSAKeyPair(String publicKey, String privateKey) {
this.publicKey = publicKey;
this.privateKey = privateKey;
}
public String getPublicKey() {
return publicKey;
}
public String getPrivateKey() {
return privateKey;
}
}
}
...@@ -58,7 +58,7 @@ public class GeneratorController { ...@@ -58,7 +58,7 @@ public class GeneratorController {
public ResponseEntity<Object> queryTables(@RequestParam(defaultValue = "") String name, public ResponseEntity<Object> queryTables(@RequestParam(defaultValue = "") String name,
@RequestParam(defaultValue = "0")Integer page, @RequestParam(defaultValue = "0")Integer page,
@RequestParam(defaultValue = "10")Integer size){ @RequestParam(defaultValue = "10")Integer size){
int[] startEnd = PageUtil.transToStartEnd(page+1, size); int[] startEnd = PageUtil.transToStartEnd(page, size);
return new ResponseEntity<>(generatorService.getTables(name,startEnd), HttpStatus.OK); return new ResponseEntity<>(generatorService.getTables(name,startEnd), HttpStatus.OK);
} }
......
...@@ -34,6 +34,7 @@ import java.util.*; ...@@ -34,6 +34,7 @@ import java.util.*;
* @date 2019-01-02 * @date 2019-01-02
*/ */
@Slf4j @Slf4j
@SuppressWarnings({"unchecked","all"})
public class GenUtil { public class GenUtil {
private static final String TIMESTAMP = "Timestamp"; private static final String TIMESTAMP = "Timestamp";
......
...@@ -36,10 +36,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -36,10 +36,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.*;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/** /**
* @author Zheng Jie * @author Zheng Jie
...@@ -88,13 +85,10 @@ public class LogServiceImpl implements LogService { ...@@ -88,13 +85,10 @@ public class LogServiceImpl implements LogService {
StringBuilder params = new StringBuilder("{"); StringBuilder params = new StringBuilder("{");
//参数值 //参数值
Object[] argValues = joinPoint.getArgs(); List<Object> argValues = new ArrayList<>(Arrays.asList(joinPoint.getArgs()));
//参数名称 //参数名称
String[] argNames = ((MethodSignature)joinPoint.getSignature()).getParameterNames(); for (Object argValue : argValues) {
if(argValues != null){ params.append(argValue).append(" ");
for (int i = 0; i < argValues.length; i++) {
params.append(" ").append(argNames[i]).append(": ").append(argValues[i]);
}
} }
// 描述 // 描述
if (log != null) { if (log != null) {
...@@ -106,8 +100,7 @@ public class LogServiceImpl implements LogService { ...@@ -106,8 +100,7 @@ public class LogServiceImpl implements LogService {
String loginPath = "login"; String loginPath = "login";
if(loginPath.equals(signature.getName())){ if(loginPath.equals(signature.getName())){
try { try {
assert argValues != null; username = new JSONObject(argValues.get(0)).get("username").toString();
username = new JSONObject(argValues[0]).get("username").toString();
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();
} }
......
...@@ -20,8 +20,8 @@ import org.springframework.context.annotation.Configuration; ...@@ -20,8 +20,8 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter; import org.springframework.web.socket.server.standard.ServerEndpointExporter;
/** /**
* @author: ZhangHouYing * @author ZhangHouYing
* @date: 2019-08-24 15:44 * @date 2019-08-24 15:44
*/ */
@Configuration @Configuration
public class WebSocketConfig { public class WebSocketConfig {
...@@ -30,5 +30,4 @@ public class WebSocketConfig { ...@@ -30,5 +30,4 @@ public class WebSocketConfig {
public ServerEndpointExporter serverEndpointExporter() { public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter(); return new ServerEndpointExporter();
} }
} }
...@@ -16,8 +16,6 @@ ...@@ -16,8 +16,6 @@
package me.zhengjie.modules.security.rest; package me.zhengjie.modules.security.rest;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import com.wf.captcha.ArithmeticCaptcha; import com.wf.captcha.ArithmeticCaptcha;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -25,12 +23,14 @@ import lombok.RequiredArgsConstructor; ...@@ -25,12 +23,14 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.zhengjie.annotation.AnonymousAccess; import me.zhengjie.annotation.AnonymousAccess;
import me.zhengjie.annotation.Log; import me.zhengjie.annotation.Log;
import me.zhengjie.config.RsaProperties;
import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.security.config.SecurityProperties; import me.zhengjie.modules.security.config.SecurityProperties;
import me.zhengjie.modules.security.security.TokenProvider; import me.zhengjie.modules.security.security.TokenProvider;
import me.zhengjie.modules.security.service.dto.AuthUserDto; import me.zhengjie.modules.security.service.dto.AuthUserDto;
import me.zhengjie.modules.security.service.dto.JwtUserDto; import me.zhengjie.modules.security.service.dto.JwtUserDto;
import me.zhengjie.modules.security.service.OnlineUserService; import me.zhengjie.modules.security.service.OnlineUserService;
import me.zhengjie.utils.RsaUtils;
import me.zhengjie.utils.RedisUtils; import me.zhengjie.utils.RedisUtils;
import me.zhengjie.utils.SecurityUtils; import me.zhengjie.utils.SecurityUtils;
import me.zhengjie.utils.StringUtils; import me.zhengjie.utils.StringUtils;
...@@ -62,8 +62,6 @@ public class AuthorizationController { ...@@ -62,8 +62,6 @@ public class AuthorizationController {
@Value("${loginCode.expiration}") @Value("${loginCode.expiration}")
private Long expiration; private Long expiration;
@Value("${rsa.private_key}")
private String privateKey;
@Value("${single.login:false}") @Value("${single.login:false}")
private Boolean singleLogin; private Boolean singleLogin;
private final SecurityProperties properties; private final SecurityProperties properties;
...@@ -76,10 +74,9 @@ public class AuthorizationController { ...@@ -76,10 +74,9 @@ public class AuthorizationController {
@ApiOperation("登录授权") @ApiOperation("登录授权")
@AnonymousAccess @AnonymousAccess
@PostMapping(value = "/login") @PostMapping(value = "/login")
public ResponseEntity<Object> login(@Validated @RequestBody AuthUserDto authUser, HttpServletRequest request){ public ResponseEntity<Object> login(@Validated @RequestBody AuthUserDto authUser, HttpServletRequest request) throws Exception {
// 密码解密 // 密码解密
RSA rsa = new RSA(privateKey, null); String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword());
String password = new String(rsa.decrypt(authUser.getPassword(), KeyType.PrivateKey));
// 查询验证码 // 查询验证码
String code = (String) redisUtils.get(authUser.getUuid()); String code = (String) redisUtils.get(authUser.getUuid());
// 清除验证码 // 清除验证码
......
...@@ -42,20 +42,14 @@ public interface DeptRepository extends JpaRepository<Dept, Long>, JpaSpecificat ...@@ -42,20 +42,14 @@ public interface DeptRepository extends JpaRepository<Dept, Long>, JpaSpecificat
*/ */
List<Dept> findByPidIsNull(); List<Dept> findByPidIsNull();
/**
* 根据ID查询名称
* @param id ID
* @return /
*/
@Query(value = "select name from sys_dept where dept_id = ?1",nativeQuery = true)
String findNameById(Long id);
/** /**
* 根据角色ID 查询 * 根据角色ID 查询
* @param id 角色ID * @param roleId 角色ID
* @return / * @return /
*/ */
Set<Dept> findByRoles_Id(Long id); @Query(value = "select d.* from sys_dept d, sys_roles_depts r where " +
"d.dept_id = r.dept_id and r.role_id = ?1", nativeQuery = true)
Set<Dept> findByRoleId(Long roleId);
/** /**
* 判断是否存在子节点 * 判断是否存在子节点
......
...@@ -19,9 +19,18 @@ import me.zhengjie.modules.system.domain.DictDetail; ...@@ -19,9 +19,18 @@ import me.zhengjie.modules.system.domain.DictDetail;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
/** /**
* @author Zheng Jie * @author Zheng Jie
* @date 2019-04-10 * @date 2019-04-10
*/ */
public interface DictDetailRepository extends JpaRepository<DictDetail, Long>, JpaSpecificationExecutor<DictDetail> { public interface DictDetailRepository extends JpaRepository<DictDetail, Long>, JpaSpecificationExecutor<DictDetail> {
/**
* 根据字典名称查询
* @param name /
* @return /
*/
List<DictDetail> findByDictName(String name);
} }
\ No newline at end of file
...@@ -18,6 +18,8 @@ package me.zhengjie.modules.system.repository; ...@@ -18,6 +18,8 @@ package me.zhengjie.modules.system.repository;
import me.zhengjie.modules.system.domain.Dict; import me.zhengjie.modules.system.domain.Dict;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
import java.util.Set; import java.util.Set;
/** /**
...@@ -31,4 +33,11 @@ public interface DictRepository extends JpaRepository<Dict, Long>, JpaSpecificat ...@@ -31,4 +33,11 @@ public interface DictRepository extends JpaRepository<Dict, Long>, JpaSpecificat
* @param ids / * @param ids /
*/ */
void deleteByIdIn(Set<Long> ids); void deleteByIdIn(Set<Long> ids);
/**
* 查询
* @param ids /
* @return /
*/
List<Dict> findByIdIn(Set<Long> ids);
} }
\ No newline at end of file
...@@ -19,6 +19,8 @@ import me.zhengjie.modules.system.domain.Job; ...@@ -19,6 +19,8 @@ import me.zhengjie.modules.system.domain.Job;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.Set;
/** /**
* @author Zheng Jie * @author Zheng Jie
* @date 2019-03-29 * @date 2019-03-29
...@@ -31,4 +33,10 @@ public interface JobRepository extends JpaRepository<Job, Long>, JpaSpecificatio ...@@ -31,4 +33,10 @@ public interface JobRepository extends JpaRepository<Job, Long>, JpaSpecificatio
* @return / * @return /
*/ */
Job findByName(String name); Job findByName(String name);
/**
* 根据Id删除
* @param ids /
*/
void deleteAllByIdIn(Set<Long> ids);
} }
\ No newline at end of file
...@@ -63,7 +63,9 @@ public interface MenuRepository extends JpaRepository<Menu, Long>, JpaSpecificat ...@@ -63,7 +63,9 @@ public interface MenuRepository extends JpaRepository<Menu, Long>, JpaSpecificat
* @param type 类型 * @param type 类型
* @return / * @return /
*/ */
LinkedHashSet<Menu> findByRoles_IdInAndTypeNotOrderByMenuSortAsc(Set<Long> roleIds, int type); @Query(value = "SELECT m.* FROM sys_menu m, sys_roles_menus r WHERE " +
"m.menu_id = r.menu_id AND r.role_id IN ?1 AND type != ?2 order by m.menu_sort asc",nativeQuery = true)
LinkedHashSet<Menu> findByRoleIdsAndTypeNot(Set<Long> roleIds, int type);
/** /**
* 获取节点数量 * 获取节点数量
......
...@@ -35,12 +35,20 @@ public interface RoleRepository extends JpaRepository<Role, Long>, JpaSpecificat ...@@ -35,12 +35,20 @@ public interface RoleRepository extends JpaRepository<Role, Long>, JpaSpecificat
*/ */
Role findByName(String name); Role findByName(String name);
/**
* 删除多个角色
* @param ids /
*/
void deleteAllByIdIn(Set<Long> ids);
/** /**
* 根据用户ID查询 * 根据用户ID查询
* @param id 用户ID * @param id 用户ID
* @return / * @return /
*/ */
Set<Role> findByUsers_Id(Long id); @Query(value = "SELECT r.* FROM sys_role r, sys_users_roles u WHERE " +
"r.role_id = u.role_id AND u.user_id = ?1",nativeQuery = true)
Set<Role> findByUserId(Long id);
/** /**
* 解绑角色菜单 * 解绑角色菜单
......
...@@ -21,6 +21,8 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; ...@@ -21,6 +21,8 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Set;
/** /**
* @author Zheng Jie * @author Zheng Jie
...@@ -60,4 +62,37 @@ public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificat ...@@ -60,4 +62,37 @@ public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificat
@Modifying @Modifying
@Query(value = "update sys_user set email = ?2 where username = ?1",nativeQuery = true) @Query(value = "update sys_user set email = ?2 where username = ?1",nativeQuery = true)
void updateEmail(String username, String email); void updateEmail(String username, String email);
/**
* 根据角色查询用户
* @param roleId /
* @return /
*/
@Query(value = "SELECT u.* FROM sys_user u, sys_users_roles r WHERE" +
" u.user_id = r.user_id AND r.role_id = ?1", nativeQuery = true)
List<User> findByRoleId(Long roleId);
/**
* 根据角色中的部门查询
* @param id /
* @return /
*/
@Query(value = "SELECT u.* FROM sys_user u, sys_users_roles r, sys_roles_depts d WHERE " +
"u.user_id = r.user_id AND r.role_id = d.role_id AND r.role_id = ?1", nativeQuery = true)
List<User> findByDeptRoleId(Long id);
/**
* 根据菜单查询
* @param id 菜单ID
* @return /
*/
@Query(value = "SELECT u.* FROM sys_user u, sys_users_roles ur, sys_roles_menus rm WHERE\n" +
"u.user_id = ur.user_id AND ur.role_id = rm.role_id AND rm.menu_id = ?1", nativeQuery = true)
List<User> findByMenuId(Long id);
/**
* 根据Id删除
* @param ids /
*/
void deleteAllByIdIn(Set<Long> ids);
} }
...@@ -22,6 +22,7 @@ import me.zhengjie.annotation.Log; ...@@ -22,6 +22,7 @@ import me.zhengjie.annotation.Log;
import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.system.domain.DictDetail; import me.zhengjie.modules.system.domain.DictDetail;
import me.zhengjie.modules.system.service.DictDetailService; import me.zhengjie.modules.system.service.DictDetailService;
import me.zhengjie.modules.system.service.dto.DictDetailDto;
import me.zhengjie.modules.system.service.dto.DictDetailQueryCriteria; import me.zhengjie.modules.system.service.dto.DictDetailQueryCriteria;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
...@@ -32,6 +33,8 @@ import org.springframework.security.access.prepost.PreAuthorize; ...@@ -32,6 +33,8 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
...@@ -58,15 +61,13 @@ public class DictDetailController { ...@@ -58,15 +61,13 @@ public class DictDetailController {
@Log("查询多个字典详情") @Log("查询多个字典详情")
@ApiOperation("查询多个字典详情") @ApiOperation("查询多个字典详情")
@GetMapping(value = "/map") @GetMapping(value = "/map")
public ResponseEntity<Object> getDictDetailMaps(DictDetailQueryCriteria criteria, public ResponseEntity<Object> getDictDetailMaps(@RequestParam String dictName){
@PageableDefault(sort = {"dictSort"}, direction = Sort.Direction.ASC) Pageable pageable){ String[] names = dictName.split("[,,]");
String[] names = criteria.getDictName().split(","); Map<String, List<DictDetailDto>> dictMap = new HashMap<>(16);
Map<String,Object> map = new HashMap<>(names.length);
for (String name : names) { for (String name : names) {
criteria.setDictName(name); dictMap.put(name, dictDetailService.getDictByName(name));
map.put(name,dictDetailService.queryAll(criteria,pageable).get("content"));
} }
return new ResponseEntity<>(map,HttpStatus.OK); return new ResponseEntity<>(dictMap, HttpStatus.OK);
} }
@Log("新增字典详情") @Log("新增字典详情")
......
...@@ -22,9 +22,9 @@ import me.zhengjie.annotation.Log; ...@@ -22,9 +22,9 @@ import me.zhengjie.annotation.Log;
import me.zhengjie.modules.system.domain.Menu; import me.zhengjie.modules.system.domain.Menu;
import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.system.service.MenuService; import me.zhengjie.modules.system.service.MenuService;
import me.zhengjie.modules.system.service.RoleService;
import me.zhengjie.modules.system.service.dto.MenuDto; import me.zhengjie.modules.system.service.dto.MenuDto;
import me.zhengjie.modules.system.service.dto.MenuQueryCriteria; import me.zhengjie.modules.system.service.dto.MenuQueryCriteria;
import me.zhengjie.modules.system.service.mapstruct.MenuMapper;
import me.zhengjie.utils.PageUtil; import me.zhengjie.utils.PageUtil;
import me.zhengjie.utils.SecurityUtils; import me.zhengjie.utils.SecurityUtils;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
...@@ -47,7 +47,7 @@ import java.util.*; ...@@ -47,7 +47,7 @@ import java.util.*;
public class MenuController { public class MenuController {
private final MenuService menuService; private final MenuService menuService;
private final RoleService roleService; private final MenuMapper menuMapper;
private static final String ENTITY_NAME = "menu"; private static final String ENTITY_NAME = "menu";
@Log("导出菜单数据") @Log("导出菜单数据")
...@@ -58,10 +58,10 @@ public class MenuController { ...@@ -58,10 +58,10 @@ public class MenuController {
menuService.download(menuService.queryAll(criteria, false), response); menuService.download(menuService.queryAll(criteria, false), response);
} }
@ApiOperation("获取前端所需菜单")
@GetMapping(value = "/build") @GetMapping(value = "/build")
@ApiOperation("获取前端所需菜单")
public ResponseEntity<Object> buildMenus(){ public ResponseEntity<Object> buildMenus(){
List<MenuDto> menuDtoList = menuService.findByRoles(roleService.findByUsersId(SecurityUtils.getCurrentUserId())); List<MenuDto> menuDtoList = menuService.findByUser(SecurityUtils.getCurrentUserId());
List<MenuDto> menuDtos = menuService.buildTree(menuDtoList); List<MenuDto> menuDtos = menuService.buildTree(menuDtoList);
return new ResponseEntity<>(menuService.buildMenus(menuDtos),HttpStatus.OK); return new ResponseEntity<>(menuService.buildMenus(menuDtos),HttpStatus.OK);
} }
...@@ -123,9 +123,9 @@ public class MenuController { ...@@ -123,9 +123,9 @@ public class MenuController {
public ResponseEntity<Object> delete(@RequestBody Set<Long> ids){ public ResponseEntity<Object> delete(@RequestBody Set<Long> ids){
Set<Menu> menuSet = new HashSet<>(); Set<Menu> menuSet = new HashSet<>();
for (Long id : ids) { for (Long id : ids) {
List<Menu> menuList = menuService.findByPid(id); List<MenuDto> menuList = menuService.getMenus(id);
menuSet.add(menuService.findOne(id)); menuSet.add(menuService.findOne(id));
menuSet = menuService.getDeleteMenus(menuList, menuSet); menuSet = menuService.getDeleteMenus(menuMapper.toEntity(menuList), menuSet);
} }
menuService.delete(menuSet); menuService.delete(menuSet);
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
......
...@@ -16,12 +16,11 @@ ...@@ -16,12 +16,11 @@
package me.zhengjie.modules.system.rest; package me.zhengjie.modules.system.rest;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import me.zhengjie.annotation.Log; import me.zhengjie.annotation.Log;
import me.zhengjie.config.RsaProperties;
import me.zhengjie.modules.system.service.DataService; import me.zhengjie.modules.system.service.DataService;
import me.zhengjie.modules.system.domain.User; import me.zhengjie.modules.system.domain.User;
import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.BadRequestException;
...@@ -35,7 +34,6 @@ import me.zhengjie.modules.system.service.VerifyService; ...@@ -35,7 +34,6 @@ import me.zhengjie.modules.system.service.VerifyService;
import me.zhengjie.utils.*; import me.zhengjie.utils.*;
import me.zhengjie.modules.system.service.UserService; import me.zhengjie.modules.system.service.UserService;
import me.zhengjie.utils.enums.CodeEnum; import me.zhengjie.utils.enums.CodeEnum;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
...@@ -61,8 +59,6 @@ import java.util.stream.Collectors; ...@@ -61,8 +59,6 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor @RequiredArgsConstructor
public class UserController { public class UserController {
@Value("${rsa.private_key}")
private String privateKey;
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;
private final UserService userService; private final UserService userService;
private final DataService dataService; private final DataService dataService;
...@@ -85,7 +81,8 @@ public class UserController { ...@@ -85,7 +81,8 @@ public class UserController {
public ResponseEntity<Object> query(UserQueryCriteria criteria, Pageable pageable){ public ResponseEntity<Object> query(UserQueryCriteria criteria, Pageable pageable){
if (!ObjectUtils.isEmpty(criteria.getDeptId())) { if (!ObjectUtils.isEmpty(criteria.getDeptId())) {
criteria.getDeptIds().add(criteria.getDeptId()); criteria.getDeptIds().add(criteria.getDeptId());
criteria.getDeptIds().addAll(dataService.getDeptChildren(deptService.findByPid(criteria.getDeptId()))); criteria.getDeptIds().addAll(deptService.getDeptChildren(criteria.getDeptId(),
deptService.findByPid(criteria.getDeptId())));
} }
// 数据权限 // 数据权限
List<Long> dataScopes = dataService.getDeptIds(userService.findByName(SecurityUtils.getCurrentUsername())); List<Long> dataScopes = dataService.getDeptIds(userService.findByName(SecurityUtils.getCurrentUsername()));
...@@ -155,11 +152,9 @@ public class UserController { ...@@ -155,11 +152,9 @@ public class UserController {
@ApiOperation("修改密码") @ApiOperation("修改密码")
@PostMapping(value = "/updatePass") @PostMapping(value = "/updatePass")
public ResponseEntity<Object> updatePass(@RequestBody UserPassVo passVo){ public ResponseEntity<Object> updatePass(@RequestBody UserPassVo passVo) throws Exception {
// 密码解密 String oldPass = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey,passVo.getOldPass());
RSA rsa = new RSA(privateKey, null); String newPass = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey,passVo.getNewPass());
String oldPass = new String(rsa.decrypt(passVo.getOldPass(), KeyType.PrivateKey));
String newPass = new String(rsa.decrypt(passVo.getNewPass(), KeyType.PrivateKey));
UserDto user = userService.findByName(SecurityUtils.getCurrentUsername()); UserDto user = userService.findByName(SecurityUtils.getCurrentUsername());
if(!passwordEncoder.matches(oldPass, user.getPassword())){ if(!passwordEncoder.matches(oldPass, user.getPassword())){
throw new BadRequestException("修改失败,旧密码错误"); throw new BadRequestException("修改失败,旧密码错误");
...@@ -181,10 +176,8 @@ public class UserController { ...@@ -181,10 +176,8 @@ public class UserController {
@Log("修改邮箱") @Log("修改邮箱")
@ApiOperation("修改邮箱") @ApiOperation("修改邮箱")
@PostMapping(value = "/updateEmail/{code}") @PostMapping(value = "/updateEmail/{code}")
public ResponseEntity<Object> updateEmail(@PathVariable String code,@RequestBody User user){ public ResponseEntity<Object> updateEmail(@PathVariable String code,@RequestBody User user) throws Exception {
// 密码解密 String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey,user.getPassword());
RSA rsa = new RSA(privateKey, null);
String password = new String(rsa.decrypt(user.getPassword(), KeyType.PrivateKey));
UserDto userDto = userService.findByName(SecurityUtils.getCurrentUsername()); UserDto userDto = userService.findByName(SecurityUtils.getCurrentUsername());
if(!passwordEncoder.matches(password, userDto.getPassword())){ if(!passwordEncoder.matches(password, userDto.getPassword())){
throw new BadRequestException("密码错误"); throw new BadRequestException("密码错误");
......
...@@ -15,9 +15,7 @@ ...@@ -15,9 +15,7 @@
*/ */
package me.zhengjie.modules.system.service; package me.zhengjie.modules.system.service;
import me.zhengjie.modules.system.domain.Dept;
import me.zhengjie.modules.system.service.dto.UserDto; import me.zhengjie.modules.system.service.dto.UserDto;
import java.util.List; import java.util.List;
/** /**
...@@ -33,11 +31,4 @@ public interface DataService { ...@@ -33,11 +31,4 @@ public interface DataService {
* @return / * @return /
*/ */
List<Long> getDeptIds(UserDto user); List<Long> getDeptIds(UserDto user);
/**
* 递归获取子级部门
* @param deptList /
* @return /
*/
List<Long> getDeptChildren(List<Dept> deptList);
} }
...@@ -76,7 +76,7 @@ public interface DeptService { ...@@ -76,7 +76,7 @@ public interface DeptService {
* @param id / * @param id /
* @return / * @return /
*/ */
Set<Dept> findByRoleIds(Long id); Set<Dept> findByRoleId(Long id);
/** /**
* 导出数据 * 导出数据
...@@ -108,4 +108,12 @@ public interface DeptService { ...@@ -108,4 +108,12 @@ public interface DeptService {
* @return / * @return /
*/ */
Object buildTree(List<DeptDto> deptDtos); Object buildTree(List<DeptDto> deptDtos);
/**
* 获取
* @param deptId
* @param deptList
* @return
*/
List<Long> getDeptChildren(Long deptId, List<Dept> deptList);
} }
\ No newline at end of file
...@@ -19,6 +19,7 @@ import me.zhengjie.modules.system.domain.DictDetail; ...@@ -19,6 +19,7 @@ import me.zhengjie.modules.system.domain.DictDetail;
import me.zhengjie.modules.system.service.dto.DictDetailDto; import me.zhengjie.modules.system.service.dto.DictDetailDto;
import me.zhengjie.modules.system.service.dto.DictDetailQueryCriteria; import me.zhengjie.modules.system.service.dto.DictDetailQueryCriteria;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
...@@ -27,13 +28,6 @@ import java.util.Map; ...@@ -27,13 +28,6 @@ import java.util.Map;
*/ */
public interface DictDetailService { public interface DictDetailService {
/**
* 根据ID查询
* @param id /
* @return /
*/
DictDetailDto findById(Long id);
/** /**
* 创建 * 创建
* @param resources / * @param resources /
...@@ -59,4 +53,11 @@ public interface DictDetailService { ...@@ -59,4 +53,11 @@ public interface DictDetailService {
* @return / * @return /
*/ */
Map<String,Object> queryAll(DictDetailQueryCriteria criteria, Pageable pageable); Map<String,Object> queryAll(DictDetailQueryCriteria criteria, Pageable pageable);
/**
* 根据字典名称获取字典详情
* @param name 字典名称
* @return /
*/
List<DictDetailDto> getDictByName(String name);
} }
\ No newline at end of file
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