作者 钟来

模块整理

... ... @@ -7,7 +7,6 @@
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-common</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>lh-common-firewall</artifactId>
... ...
... ... @@ -7,7 +7,6 @@
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-common</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>lh-common-swagger</artifactId>
... ...
... ... @@ -7,7 +7,6 @@
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>lh-jar-action</artifactId>
... ...
... ... @@ -7,7 +7,6 @@
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>lh-jar-chatgpt</artifactId>
... ...
... ... @@ -7,7 +7,6 @@
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>lh-jar-rocketmq</artifactId>
... ...
... ... @@ -105,6 +105,10 @@
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-jar-device-service</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-login</artifactId>
</dependency>
</dependencies>
<build>
... ...
... ... @@ -11,8 +11,12 @@ import org.springframework.context.annotation.ComponentScan;
"com.ruoyi.framework",
"com.zhonglai.luhui.datasource",
"com.zhonglai.luhui.dao",
"com.zhonglai.luhui.sys",
"com.zhonglai.luhui.device",
"com.zhonglai.luhui.redis",
"com.zhonglai.luhui.rocketmq",
"com.zhonglai.luhui.security",
"com.zhonglai.luhui.login.service",
"com.zhonglai.luhui.api",
})
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
... ...
package com.zhonglai.luhui.api.config;
import com.ruoyi.common.tool.SysLogininforType;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.zhonglai.luhui.api.service.ApiUserDetailsServiceImpl;
import com.zhonglai.luhui.security.config.DefaultSecurityConfig;
import com.zhonglai.luhui.security.service.SecurityConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.PasswordEncoder;
/**
* app接口安全策略. 没有{@link Order}注解优先级比上面低
*/
@Configuration
public class ApiConfigurerAdapter extends DefaultSecurityConfig {
@Autowired
private ApiUserDetailsServiceImpl apiUserDetailsServiceImpl;
@Autowired
private SecurityConfigService securityConfigService;
@Override
public UserDetailsService getUserDetailsService() {
return apiUserDetailsServiceImpl;
}
@Override
public void configHttpSecurity(HttpSecurity httpSecurity) throws Exception {
securityConfigService.configHttpSecurity(httpSecurity);
}
@Override
public PasswordEncoder bCryptPasswordEncoder() {
return SpringUtils.getBean("bCryptPasswordEncoder");
}
@Override
public SysLogininforType sysLogininforType() {
return SysLogininforType.lhAdmin;
}
}
\ No newline at end of file
... ...
... ... @@ -3,7 +3,7 @@ package com.zhonglai.luhui.api.controller.iot;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.Message;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.service.DeviceControlService;
import com.zhonglai.luhui.device.service.DeviceControlService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
... ...
package com.zhonglai.luhui.api.controller.login;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.login.service.LoginService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "api登陆")
@RestController
@RequestMapping("/login/ApiLogin")
public class ApiLoginController extends BaseController {
public static String YU2LE_LOGIN_TOKEN_KEY = "loginToken"; //登录令牌键值
@Autowired
private LoginService loginService;
@ApiOperation("账号密码登陆")
@ApiImplicitParams({
@ApiImplicitParam(value = "账号",name = "user"),
@ApiImplicitParam(value = "密码",name = "pass"),
})
@PostMapping("/userpassLogin")
public AjaxResult userpassLogin(String user,String pass)
{
AjaxResult ajax = AjaxResult.success();
//生成令牌
String token = loginService.apiLoginByPass(user,pass);
ajax.put(Constants.TOKEN, token);
return ajax;
}
@ApiOperation("鱼儿乐token登陆")
@ApiImplicitParam(value = "鱼儿乐token",name = "loginToken")
@PostMapping("/yu2leTokenLogin")
public AjaxResult yu2leTokenLogin(@RequestHeader String loginToken)
{
if(StringUtils.isEmpty(loginToken))
{
return AjaxResult.error("请输入鱼儿乐令牌");
}
AjaxResult ajax = AjaxResult.success();
//生成令牌
String token = loginService.yu2leTokenLogin(loginToken);
ajax.put(Constants.TOKEN, token);
return ajax;
}
}
... ...
... ... @@ -9,6 +9,7 @@ import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.dao.service.PublicService;
import com.zhonglai.luhui.device.service.IUserTerminalGroupRelationService;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
... ... @@ -26,7 +27,6 @@ import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.user.UserTerminalGroupRelation;
import com.ruoyi.system.service.user.IUserTerminalGroupRelationService;
import com.ruoyi.common.core.page.TableDataInfo;
/**
... ... @@ -79,7 +79,7 @@ public class UserTerminalGroupRelationController extends BaseController
{
stringBuffer.append(" AND b.product_id="+product_id);
}
List<Map<String,Object>> list = publicService.getObjectListBySQL("SELECT b.* FROM `user_terminal_group_relation` a LEFT JOIN `iot_terminal` b ON a.`iot_terminal_id`=b.`id` WHERE a.user_info_id="+SecurityUtils.getUserId().intValue()+stringBuffer);
List<Map<String,Object>> list = publicService.getObjectListBySQL("SELECT b.*,a.id group_id FROM `user_terminal_group_relation` a LEFT JOIN `iot_terminal` b ON a.`iot_terminal_id`=b.`id` WHERE a.user_info_id="+SecurityUtils.getUserId().intValue()+stringBuffer);
return AjaxResult.success(list);
}
... ...
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 3.8.2 # 版权年份 copyrightYear: 2022 # 实例演示开关 demoEnabled: true # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) profile: D:/ruoyi/uploadPath # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数组计算 char 字符验证 captchaType: math # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 18080 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.ruoyi: debug org.springframework: warn # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-api # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* mqtt: client: device_life: 180 sys: ## // 对于登录login 注册register 验证码captchaImage 允许匿名访问 antMatchers: /login/ApiLogin/* # NameServer地址 rocketmq: name-server: 47.115.144.179:9876 # 默认的消息组 producer: group: deviceCommand send-message-timeout: 30000 send-topic: lh-api-test send-tags: 1
\ No newline at end of file
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 3.8.2 # 版权年份 copyrightYear: 2022 # 实例演示开关 demoEnabled: true # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) profile: D:/ruoyi/uploadPath # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数组计算 char 字符验证 captchaType: math # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 18080 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.ruoyi: debug org.springframework: warn # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-api # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain,com.zhonglai.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* mqtt: client: device_life: 180 sys: ## // 对于登录login 注册register 验证码captchaImage 允许匿名访问 antMatchers: /login/ApiLogin/* # NameServer地址 rocketmq: name-server: 47.115.144.179:9876 # 默认的消息组 producer: group: deviceCommand send-message-timeout: 30000 send-topic: lh-mqtt-service-deviceCommand-test send-tags: 1
\ No newline at end of file
... ...
... ... @@ -85,6 +85,10 @@
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-public-dao</artifactId>
</dependency>
</dependencies>
... ...
... ... @@ -7,6 +7,7 @@ import com.ruoyi.common.exception.user.CaptchaExpireException;
import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
import com.ruoyi.common.utils.*;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.entity.SysUser;
import com.ruoyi.common.tool.SysLogininforType;
import com.zhonglai.luhui.dao.service.PublicService;
... ... @@ -42,10 +43,6 @@ public class LoginService {
@Autowired
private ISysUserService sysUserService;
@Autowired
private AdminConfigurerAdapter adminConfigurerAdapter;
@Autowired
private ApiConfigurerAdapter apiConfigurerAdapter;
/**
* 管理员用户名密码登录验证
... ... @@ -59,7 +56,7 @@ public class LoginService {
public String sysUserLogin(String username, String password, String code, String uuid)
{
// 用户验证
Authentication authentication = userPasswordVerification(username,password,adminConfigurerAdapter);
Authentication authentication = userPasswordVerification(username,password, SpringUtils.getBean("adminConfigurerAdapter"));
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username,SysLogininforType.lhAdmin, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
SysLoginUser loginUser = (SysLoginUser) authentication.getPrincipal();
loginUser.setSysLogininforType(SysLogininforType.lhAdmin);
... ... @@ -76,7 +73,7 @@ public class LoginService {
*/
public String apiLoginByPass(String user,String pass) {
// 用户验证
Authentication authentication = userPasswordVerification(user,pass,apiConfigurerAdapter);
Authentication authentication = userPasswordVerification(user,pass,SpringUtils.getBean("apiConfigurerAdapter"));
AsyncManager.me().execute(AsyncFactory.recordLogininfor(user, SysLogininforType.lhApi, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
ApiLoginUser loginUser = (ApiLoginUser) authentication.getPrincipal();
loginUser.setSysLogininforType(SysLogininforType.lhApi);
... ... @@ -90,7 +87,7 @@ public class LoginService {
public String openaiLoginByPass(String user,String pass) {
// 用户验证
Authentication authentication = userPasswordVerification(user,pass,apiConfigurerAdapter);
Authentication authentication = userPasswordVerification(user,pass,SpringUtils.getBean("apiConfigurerAdapter"));
AsyncManager.me().execute(AsyncFactory.recordLogininfor(user, SysLogininforType.openAi, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
OpenAiLoginUser loginUser = (OpenAiLoginUser) authentication.getPrincipal();
loginUser.setSysLogininforType(SysLogininforType.openAi);
... ...
import cn.hutool.crypto.digest.DigestAlgorithm;
import cn.hutool.crypto.digest.Digester;
import org.apache.commons.io.input.ReversedLinesFileReader;
import java.io.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestMain {
private static final String SALT = "gU.Rm9YI";
private static final String ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
private static final int PASSWORD_LENGTH = 6; // 设置密码长度
private static final int BUFFER_SIZE = 8192; // 缓冲区大小
private static final int NUM_THREADS = 100; // 线程数
public static void main(String[] args) {
// String filePath = "E:/工作/28GB超大密码字典_28GBwordlist.txt";
//
// try {
// readFromFile(filePath);
// } catch (IOException e) {
// e.printStackTrace();
// }
Digester md5 = new Digester(DigestAlgorithm.SHA512);
md5.setSalt("gU.Rm9YI".getBytes());
String digestHex = md5.digestHex("Luhui586");
System.out.println(digestHex);
}
private static void readFromFile(String filePath) throws IOException {
ExecutorService executorService = Executors.newFixedThreadPool(NUM_THREADS);
try (FileReader fileReader = new FileReader(filePath);
BufferedReader bufferedReader = new BufferedReader(fileReader, BUFFER_SIZE)) {
String line;
long lineNumber = 0;
while ((line = bufferedReader.readLine()) != null) {
lineNumber++;
// 并行处理每一行数据
final String currentLine = line;
final long currentLineNumber = lineNumber;
executorService.submit(() -> processLine(currentLine, currentLineNumber));
}
} finally {
executorService.shutdown();
}
}
private static void processLine(String line, long lineNumber) {
// 在这里处理每一行数据的逻辑
String text = line;
// 第一种:创建Digester对象,执行加密
Digester md5 = new Digester(DigestAlgorithm.SHA512);
md5.setSalt("gU.Rm9YI".getBytes());
String digestHex = md5.digestHex(text);
// System.out.println(digestHex);
if("bFKi1LTbejFr5zng5hrJtnTcmalZn8L3H7YMahtTWIqQYFW6CmvRg7yv8aeb8CUygje0dqpC6lEZ8Xx9GFR9g".equals(digestHex))
{
System.out.println("Line " + lineNumber + ": " + line);
}
}
}
\ No newline at end of file
... ...